...
 
Commits (19)
CHANGELOG for ACL for Drupal 6
acl 6.x-1.x-dev:
Enhancements:
- Revise the README.txt file.
Bugs fixed:
- Fix a Coder complaint (no functional change).
- #1241816: Improve the wording of the Authcache message.
acl 6.x-1.4 (2011-07-26):
Enhancements:
- Provide compatibility warning about Authcache contrib module.
acl 6.x-1.3 (2011-01-06):
Bugs fixed:
- Remove the premature acl_views_api() hook implementation (we're not ready for Views yet).
- #836822: Don't anonymize 'deny' grant records.
- #793380: Remove t() calls from hook_schema according to #332123.
Enhancements:
- #968382: Install better indexes.
- Remove translation files in favor of localize.drupal.org.
- #936682: Add a 'number' column and some indexes to the {acl} table.
- Create new hook_acl_explain() to allow the client to explain its grant records.
- #759882: Add acl_remove_all_users($acl_id) API function.
- Add acl_has_user($acl_id, $uid) API function.
acl 6.x-1.2 (2010-01-25):
Bugs fixed:
- #694236: Suppress a harmless but irritating warning from acl_update_6001().
acl 6.x-1.1 (2010-01-24):
Bugs fixed:
- #680324: Add missing index if upgraded from D5.
Enhancements:
- Clean up some minor coder issues (no functional changes).
acl 6.x-1.0 (2009-06-03):
Enhancements:
- #243073: Update Swedish translation and add .pot file.
......@@ -40,7 +68,7 @@ acl 6.x-1.x-BETA1 (2008-10-14):
- #243073: Add Swedish translation.
- Improve hook_node_access_explain().
- #135687: Implement grant priority.
- #229451: Allow acl_edit_form() without pre-created acl_id.
- #229451: Allow acl_edit_form() without pre-created acl_id.
- Implement hook_user('delete') and remove orphaned {acl_user} records.
- #232413: Fix error message when removing the last moderator.
- #231096: Implement hook_nodeapi('delete') and remove orphaned {acl_node} records.
......
This module has no UI of its own and unless some other module uses it,
it won't appear to add anything to your site. Only bother with this module
if some other module tells you to.
\ No newline at end of file
README.txt for ACL 6.x-1.x
>>>> Please feel free to suggest improvements and additions to this file! <<<<
Overview
--------
ACL has no UI of its own and unless some other module uses it, it won't appear
to add anything to your site. Only bother with this module if some other module
tells you to.
For client modules that want to implement by-user node access in a robust and
compatible way, ACL provides the required functionality.
For a sample implementation see the Forum Access module:
http://drupal.org/project/forum_access
Acknowledgements
----------------
Originally written for Drupal 5 and maintained by merlinofchaos.
Ported to Drupal 6 and maintained by salvis.
Upgrading from Drupal 5
-----------------------
Update to the latest D5 release, then upgrade as outlined in the Drupal 6 docs.
Troubleshooting
---------------
Even though ACL does not do anything by its own, Core recognizes it as a node
access module, and it requires you to rebuild permissions upon installation.
The client module is fully responsible for the correct use of ACL. It is very
unlikely that ACL should cause errors.
If there is a node access problem, or if you intend to implement a module that
uses ACL, we highly recommend to use the Devel Node Access module as outlined
in the step-by-step instructions in
http://drupal.org/node/add/project-issue/acl
Support/Customizations
----------------------
Support by volunteers is available on
http://drupal.org/project/issues/acl?status=All&version=6.x
Please consider helping others as a way to give something back to the community
that provides Drupal and the contributed modules to you free of charge.
For paid support and customizations of this module, help with implementing an
ACL client module, or other Drupal work, contact the maintainer through his
contact form:
http://drupal.org/user/82964
<?php
// $Id$
/**
* @file
......@@ -13,7 +12,7 @@ function _acl_edit_form($acl_id, $label = NULL, $new_acl = FALSE) {
$users = array();
if (!$new_acl) {
// Ensure the ACL in question even exists.
if (!$acl_name = db_result(db_query("SELECT name FROM {acl} WHERE acl_id = %d", $acl_id))) {
if (!$record = db_fetch_array(db_query("SELECT name, number FROM {acl} WHERE acl_id = %d", $acl_id))) {
return array();
}
$result = db_query("SELECT u.uid, u.name FROM {users} u LEFT JOIN {acl_user} aclu ON aclu.uid = u.uid WHERE acl_id = %d", $acl_id);
......@@ -22,13 +21,13 @@ function _acl_edit_form($acl_id, $label = NULL, $new_acl = FALSE) {
}
}
if (!isset($label)) {
$label = (empty($acl_name) ? $acl_id : $acl_name);
$label = (isset($record['name']) ? $record['name'] : (isset($record['number']) ? $record['number'] : $acl_id));
}
$form = array(
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#title' => $label,
'#title' => check_plain($label),
'#tree' => TRUE,
);
......
<?php
/**
* @file
* API documentation for ACL.
*/
/**
* Explain what your ACL grant records mean.
*/
function hook_acl_explain($acl_id, $name, $users = NULL) {
if (empty($users)) {
return "ACL (id=$acl_id) would grant access to $name.";
}
return "ACL (id=$acl_id) grants access to $name to the listed user(s).";
}
<?php
// $Id$
/**
* @file
......@@ -18,33 +17,39 @@ function acl_install() {
*/
function acl_schema() {
$schema['acl'] = array(
'description' => t('The base Access Control Lists table.'),
'description' => 'The base Access Control Lists table.',
'fields' => array(
'acl_id' => array(
'description' => t('Primary key: unique ACL ID.'),
'description' => 'Primary key: unique ACL ID.',
'type' => 'serial',
'not null' => TRUE),
'module' => array(
'description' => t('The name of the module that created this ACL entry.'),
'description' => 'The name of the module that created this ACL entry.',
'type' => 'varchar',
'length' => 255,
'not null' => TRUE),
'name' => array(
'description' => t('A name (or other identifying information) for this ACL entry, given by the module that created it.'),
'description' => 'A name (or other identifying information) for this ACL entry, given by the module that created it.',
'type' => 'varchar',
'length' => 255)),
'length' => 255),
'number' => array(
'description' => "A number for this ACL entry, given by the module that created it; use either 'name' or 'number'.",
'type' => 'int')),
'primary key' => array('acl_id'),
'indexes' => array(
'module_name_number' => array(array('module', 64), array('name', 64), 'number'),
'module_number' => array(array('module', 64), 'number')),
);
$schema['acl_user'] = array(
'description' => t('Identifies {users} to which the referenced {acl} entry applies.'),
'description' => 'Identifies {users} to which the referenced {acl} entry applies.',
'fields' => array(
'acl_id' => array(
'description' => t('The {acl}.acl_id of the entry.'),
'description' => 'The {acl}.acl_id of the entry.',
'type' => 'int',
'not null' => TRUE,
'default' => 0),
'uid' => array(
'description' => t('The {user}.uid to which this {acl} entry applies.'),
'description' => 'The {user}.uid to which this {acl} entry applies.',
'type' => 'int',
'not null' => TRUE,
'default' => 0)),
......@@ -53,41 +58,41 @@ function acl_schema() {
'uid' => array('uid')),
);
$schema['acl_node'] = array(
'description' => t('Identifies {node}s to which the referenced {acl} entry applies and defines the permissions granted.'),
'description' => 'Identifies {node}s to which the referenced {acl} entry applies and defines the permissions granted.',
'fields' => array(
'acl_id' => array(
'description' => t('The {acl}.acl_id of the entry.'),
'description' => 'The {acl}.acl_id of the entry.',
'type' => 'int',
'not null' => TRUE,
'default' => 0),
'nid' => array(
'description' => t('The {node}.nid to grant permissions for.'),
'description' => 'The {node}.nid to grant permissions for.',
'type' => 'int',
'not null' => TRUE,
'default' => 0),
'grant_view' => array(
'description' => t('Whether to grant "view" permission.'),
'description' => 'Whether to grant "view" permission.',
'type' => 'int',
'size' => 'tiny',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0),
'grant_update' => array(
'description' => t('Whether to grant "update" permission.'),
'description' => 'Whether to grant "update" permission.',
'type' => 'int',
'size' => 'tiny',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0),
'grant_delete' => array(
'description' => t('Whether to grant "delete" permission.'),
'description' => 'Whether to grant "delete" permission.',
'type' => 'int',
'size' => 'tiny',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0),
'priority' => array(
'description' => t('The priority of this grant record (for hook_node_access_records()).'),
'description' => 'The priority of this grant record (for hook_node_access_records()).',
'type' => 'int',
'size' => 'small',
'not null' => TRUE,
......@@ -99,6 +104,23 @@ function acl_schema() {
return $schema;
}
/**
* Implementation of hook_requirements().
*/
function acl_requirements($phase) {
$requirements = array();
$t = get_t();
// Check for existence of incompatible Authcache contrib module.
if ($phase == 'runtime' && module_exists('authcache')) {
$requirements['acl'] = array(
'title' => $t('!ACL compatibility', array('!ACL' => '<a href="http://drupal.org/project/acl">ACL</a>')),
'value' => $t('!Authcache changes the behavior of Drupal in a way that is fundamentally incompatible with the per-user access control implemented by ACL. Please disable it!', array('!Authcache' => '<a href="http://drupal.org/project/authcache">Authcache</a>')),
'severity' => REQUIREMENT_ERROR,
);
}
return $requirements;
}
/*
* Implementation of hook_uninstall().
......@@ -170,7 +192,30 @@ function acl_update_6000() {
*/
function acl_update_6001() {
$ret = array();
db_add_index($ret, 'acl_node', 'nid', array('nid'));
@db_add_index($ret, 'acl_node', 'nid', array('nid'));
return ($ret['success'] ? $ret : array()); // ignore possible error, if the index already exists
}
/**
* Add 'number' column, add indexes.
*/
function acl_update_6002() {
$ret = array();
db_add_field($ret, 'acl', 'number', array('type' => 'int', 'description' => "A number for this ACL entry, given by the module that created it; use either 'name' or 'number'."));
db_add_index($ret, 'acl', 'name', array('name'));
db_add_index($ret, 'acl', 'number', array('number'));
return $ret;
}
/**
* Install better indexes.
*/
function acl_update_6003() {
$ret = array();
db_drop_index($ret, 'acl', 'name');
db_drop_index($ret, 'acl', 'number');
db_add_index($ret, 'acl', 'module_name_number', array(array('module', 64), array('name', 64), 'number'));
db_add_index($ret, 'acl', 'module_number', array(array('module', 64), 'number'));
return $ret;
}
<?php
// $Id$
/**
* @file
......@@ -13,9 +12,21 @@
/**
* Create a new ACL.
*
* The client module will have to keep track of the ACL. For that it can
* assign either a $name or a $number to this ACL.
*
* @param $module
* The name of the client module.
* @param $name
* An arbitrary name for this ACL, freely defined by the client module.
* @param $number
* An arbitrary number for this ACL, freely defined by the client module.
* @return
* The ID of the newly created ACL.
*/
function acl_create_new_acl($module, $name) {
$acl = array('module' => $module, 'name' => $name);
function acl_create_new_acl($module, $name = NULL, $number = NULL) {
$acl = array('module' => $module, 'name' => $name, 'number' => $number);
drupal_write_record('acl', $acl);
return $acl['acl_id'];
}
......@@ -25,7 +36,7 @@ function acl_create_new_acl($module, $name) {
*/
function acl_delete_acl($acl_id) {
db_query("DELETE FROM {acl} WHERE acl_id = %d", $acl_id);
db_query("DELETE FROM {acl_user} WHERE acl_id = %d", $acl_id);
acl_remove_all_users($acl_id);
db_query("DELETE FROM {acl_node} WHERE acl_id = %d", $acl_id);
}
......@@ -46,6 +57,13 @@ function acl_remove_user($acl_id, $uid) {
db_query("DELETE FROM {acl_user} WHERE acl_id = %d AND uid = %d ", $acl_id, $uid);
}
/**
* Remove all users from an ACL.
*/
function acl_remove_all_users($acl_id) {
db_query("DELETE FROM {acl_user} WHERE acl_id = %d", $acl_id);
}
/**
* Provide a form to edit the ACL that can be embedded in other forms.
* Pass $new_acl=TRUE if you have no ACL yet, but do supply a string
......@@ -85,17 +103,31 @@ function acl_node_clear_acls($nid, $module) {
}
/**
* Gets the id of an acl
* Gets the id of an ACL by name.
*/
function acl_get_id_by_name($module, $name) {
return db_result(db_query("SELECT acl_id FROM {acl} WHERE module = '%s' AND name = '%s'", $module, $name));
}
/**
* Gets the id of an ACL by number.
*/
function acl_get_id_by_number($module, $number) {
return db_result(db_query("SELECT acl_id FROM {acl} WHERE module = '%s' AND number = %d", $module, $number));
}
/**
* Determines if an acl has some assigned users
*/
function acl_has_users($acl_id) {
return db_result(db_query("SELECT COUNT(aclu.uid) FROM {acl_user} aclu WHERE acl_id = %d", $acl_id));
return db_result(db_query("SELECT COUNT(uid) FROM {acl_user} WHERE acl_id = %d", $acl_id));
}
/**
* Determines if an acl has a specific assigned user
*/
function acl_has_user($acl_id, $uid) {
return 0 != db_result(db_query("SELECT COUNT(uid) FROM {acl_user} WHERE acl_id = %d AND uid = %d", $acl_id, $uid));
}
/**
......@@ -128,7 +160,7 @@ function acl_node_access_records($node) {
//just deny access
$grants[] = array(
'realm' => 'acl',
'gid' => 0,
'gid' => $grant['gid'],
'grant_view' => 0,
'grant_update' => 0,
'grant_delete' => 0,
......@@ -174,6 +206,21 @@ function acl_user($op, &$edit, &$account, $category = NULL) {
}
}
/**
* Implementation of hook_form_alter().
*
* Add a compatibility error message to the module display view if needed.
*/
function acl_form_system_modules_alter(&$form, $form_state) {
if ((!isset($form['#theme']) || $form['#theme'] != 'confirm_form')) {
if (module_exists('authcache')) {
module_load_install('acl');
$requirements = acl_requirements('runtime');
drupal_set_message($requirements['acl']['title'] . ': ' . $requirements['acl']['value'], 'error');
}
}
}
/**
* Implementation of hook_node_access_explain().
*/
......@@ -182,17 +229,28 @@ function acl_node_access_explain($row) {
if ($row->realm == 'acl') {
if (!isset($interpretations[$row->gid])) {
$acl = db_fetch_object(db_query("SELECT * FROM {acl} WHERE acl_id = %d", $row->gid));
$acl->tag = '?';
if (!isset($acl->name)) {
$acl->tag = $acl->number;
}
elseif (!isset($acl->number)) {
$acl->tag = $acl->name;
}
else {
$acl->tag = $acl->name . '-' . $acl->number;
}
$result = db_query("SELECT u.name FROM {acl_user} au, {users} u WHERE au.acl_id = %d AND au.uid = u.uid", $row->gid);
while ($user = db_fetch_object($result)) {
$users[] = $user->name;
}
if (isset($users)) {
$interpretations[$row->gid] = $acl->module .'/'. $acl->name .': '. implode(', ', $users);
$users = implode(', ', $users);
$interpretations[$row->gid] = _acl_get_explanation("$acl->module/$acl->tag: $users", $acl->acl_id, $acl->module, $acl->name, $acl->number, $users);
}
elseif ($row->gid == 0) {
$result = db_query("SELECT an.acl_id, a.module, a.name FROM {acl_node} an JOIN {acl} a ON an.acl_id = a.acl_id LEFT JOIN {acl_user} au ON a.acl_id = au.acl_id WHERE an.nid = %d AND au.uid IS NULL", $row->nid);
while ($acl = db_fetch_object($result)) {
$rows[] = $acl->acl_id .':&nbsp;'. $acl->module .'/'. $acl->name;
$rows[] = _acl_get_explanation("$acl->acl_id:&nbsp;$acl->module/$acl->tag", $acl->acl_id, $acl->module, $acl->name, $acl->number);
}
if (!empty($rows)) {
return implode('<br />', $rows);
......@@ -200,10 +258,21 @@ function acl_node_access_explain($row) {
return 'No access via ACL.';
}
else {
$interpretations[$row->gid] .= ': no users!';
$interpretations[$row->gid] = _acl_get_explanation("$acl->module/$acl->tag: no users!", $acl->acl_id, $acl->module, $acl->name, $acl->number);
}
}
return $interpretations[$row->gid];
}
}
/**
* Asks the client for its interpretation of the given grant record.
*/
function _acl_get_explanation($text, $acl_id, $module, $name, $number, $users = NULL) {
$hook = $module .'_acl_explain';
if (function_exists($hook)) {
return '<span title="'. $hook($acl_id, $name, $number, $users) .'">'. $text .'</span>';
}
return $text;
}
# $Id$
#
# LANGUAGE translation of Drupal (general)
# Copyright YEAR NAME <EMAIL@ADDRESS>
# Generated from files:
# acl.admin.inc,v 1.2 2009/01/27 01:21:22 salvis
# acl.module,v 1.19 2009/02/20 21:46:00 salvis
# acl.install,v 1.10 2009/01/03 19:01:13 salvis
# acl.info: n/a
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"POT-Creation-Date: 2009-05-09 14:04+0200\n"
"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
"Last-Translator: NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: acl.admin.inc:43
msgid "Remove Checked"
msgstr ""
#: acl.admin.inc:49
msgid "Add user"
msgstr ""
#: acl.admin.inc:57
msgid "Add User"
msgstr ""
#: acl.admin.inc:92
msgid "Invalid user specified."
msgstr ""
#: acl.admin.inc:102
msgid "Current users"
msgstr ""
#: acl.module:0
msgid "acl"
msgstr ""
#: acl.install:17
msgid "The base Access Control Lists table."
msgstr ""
#: acl.install:20
msgid "Primary key: unique ACL ID."
msgstr ""
#: acl.install:24
msgid "The name of the module that created this ACL entry."
msgstr ""
#: acl.install:29
msgid "A name (or other identifying information) for this ACL entry, given by the module that created it."
msgstr ""
#: acl.install:35
msgid "Identifies {users} to which the referenced {acl} entry applies."
msgstr ""
#: acl.install:38;55
msgid "The {acl}.acl_id of the entry."
msgstr ""
#: acl.install:43
msgid "The {user}.uid to which this {acl} entry applies."
msgstr ""
#: acl.install:52
msgid "Identifies {node}s to which the referenced {acl} entry applies and defines the permissions granted."
msgstr ""
#: acl.install:60
msgid "The {node}.nid to grant permissions for."
msgstr ""
#: acl.install:65
msgid "Whether to grant \"view\" permission."
msgstr ""
#: acl.install:72
msgid "Whether to grant \"update\" permission."
msgstr ""
#: acl.install:79
msgid "Whether to grant \"delete\" permission."
msgstr ""
#: acl.install:86
msgid "The priority of this grant record (for hook_node_access_records())."
msgstr ""
#: acl.info:0
msgid "ACL"
msgstr ""
#: acl.info:0
msgid "Access control list API. Has no features on its own."
msgstr ""
#: acl.info:0
msgid "Access control"
msgstr ""
# $Id$
#
# german translation of Drupal (acl)
# Copyright 2008 Eikaa
#
msgid ""
msgstr ""
"Project-Id-Version: ACL 6.x\n"
"POT-Creation-Date: 2008-04-04 20:56+0200\n"
"PO-Revision-Date: 2009-02-05 22:55+0100\n"
"Last-Translator: Eikaa\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Poedit-Language: German\n"
"X-Poedit-Country: GERMANY\n"
"X-Poedit-SourceCharset: utf-8\n"
#: acl.module:82
msgid "Remove Checked"
msgstr "Entferne Ausgewählte"
#: acl.module:88
msgid "Add user"
msgstr "Nutzer hinzufügen"
#: acl.module:95
msgid "Add User"
msgstr "Nutzer hinzufügen"
#: acl.module:149
msgid "Current users"
msgstr "Derzeitige Nutzer"
#: acl.module:0
msgid "acl"
msgstr "acl"
#: acl.install:17
msgid "The base Access Control Lists table."
msgstr "Die \"Access Control Lists\" Tabelle"
#: acl.install:20
msgid "Primary key: unique ACL ID."
msgstr "Primary key: unique ACL ID."
#: acl.install:24
msgid "The name of the module that created this ACL entry."
msgstr "Name des Moduls, dass diesen ACL Eintrag vorgenommen hat."
#: acl.install:28
msgid "A name (or other identifying information) for this ACL entry, given by the module that created it."
msgstr "Ein Name (oder andere identifizierende Information), für diesen ACL Eintrag, der vom Modul stammt, dass diesen Eintrag gemacht hat."
#: acl.install:34
msgid "Identifies {users} to which the referenced {acl} entry applies."
msgstr "Identifiziert {users} welche vom referenzierten {acl} Eintrag betroffen sind."
#: acl.install:37;54
msgid "The {acl}.acl_id of the entry."
msgstr "Die {acl}.acl_id des Eintrags"
#: acl.install:42
msgid "The {user}.uid to which this {acl} entry applies."
msgstr "Die {user}.uid zu der dieser {acl} Eintrag gehört."
#: acl.install:51
msgid "Identifies {node}s to which the referenced {acl} entry applies and defines the permissions granted."
msgstr "Identifiziert {node}s die von einem {acl} Eintrag betroffen sind und definiert die Zugriffsrechte."
#: acl.install:59
msgid "The {node}.nid to grant permissions for."
msgstr "Die {node}.nid für die die Zugriffsrechte gelten sollen."
#: acl.install:64
msgid "Whether to grant \"view\" permission."
msgstr "Ob \"Ansehen\" Rechte gewährt werden sollen."
#: acl.install:71
msgid "Whether to grant \"update\" permission."
msgstr "Ob \"Ändern\" Rechte gewährt werden sollen."
#: acl.install:78
msgid "Whether to grant \"delete\" permission."
msgstr "Ob \"Löschen\" Rechte gewährt werden sollen."
#: acl.install:85
msgid "The priority of this grant record (for hook_node_access_records())."
msgstr "Die Priorität dieses Zugriffsrechts (für hook_node_access_records())."
#: acl.info:0
msgid "ACL"
msgstr "ACL"
#: acl.info:0
msgid "Access control list API. Has no features on its own."
msgstr "Access control list API. Hat keine Eigenständige Funktionalität."
#: acl.info:0
msgid "Access control"
msgstr "Access Control (Zugriffsrechte)"
# $Id$
#
# Swedish translation of Drupal (acl)
# Generated from files:
# acl.admin.inc,v 1.2 2009/01/27 01:21:22 salvis
# acl.module,v 1.19 2009/02/20 21:46:00 salvis
# acl.install,v 1.10 2009/01/03 19:01:13 salvis
# acl.info: n/a
#
msgid ""
msgstr ""
"Project-Id-Version: ACL 6.x\n"
"POT-Creation-Date: 2009-05-09 14:04+0200\n"
"PO-Revision-Date: 2009-05-09 23:03+0100\n"
"Last-Translator: Magnus Gunnarsson <seals@passagen.se>\n"
"Language-Team: drupalsverige.se\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Poedit-Language: Swedish\n"
"X-Poedit-Country: SWEDEN\n"
"X-Poedit-SourceCharset: utf-8\n"
#: acl.admin.inc:43
msgid "Remove Checked"
msgstr "Ta bort kontrollerade"
#: acl.admin.inc:49
msgid "Add user"
msgstr "Lägg till användare"
#: acl.admin.inc:57
msgid "Add User"
msgstr "Lägg till användare"
#: acl.admin.inc:92
msgid "Invalid user specified."
msgstr "Ogiltig användare specificerad."
#: acl.admin.inc:102
msgid "Current users"
msgstr "Nuvarande användare"
#: acl.module:0
msgid "acl"
msgstr "acl"
#: acl.install:17
msgid "The base Access Control Lists table."
msgstr "Huvudtabellen för behörighetsvisning."
#: acl.install:20
msgid "Primary key: unique ACL ID."
msgstr "Primärnyckel: Unikt ID för ACL."
#: acl.install:24
msgid "The name of the module that created this ACL entry."
msgstr "Namnet på modulen som skapade den här noteringen av typen ACL."
#: acl.install:29
msgid "A name (or other identifying information) for this ACL entry, given by the module that created it."
msgstr "Ett namn (eller annan identifierbar information) för den här noteringen av typen ACL, givet av modulen som skapade det."
#: acl.install:35
msgid "Identifies {users} to which the referenced {acl} entry applies."
msgstr "Identifierar {users} för noteringen till den refererade {acl} det gäller."
#: acl.install:38;55
msgid "The {acl}.acl_id of the entry."
msgstr "Den {acl}.acl_id för noteringen."
#: acl.install:43
msgid "The {user}.uid to which this {acl} entry applies."
msgstr "Den {user}.uid till vilken den här noteringen av typen {acl} det gäller."
#: acl.install:52
msgid "Identifies {node}s to which the referenced {acl} entry applies and defines the permissions granted."
msgstr "Identifierar {node}(er) till vilken den här noteringen av typen {acl} det gäller och definiera givna rättigheter."
#: acl.install:60
msgid "The {node}.nid to grant permissions for."
msgstr "Den {node}.nid att ge rättigheter till."
#: acl.install:65
msgid "Whether to grant \"view\" permission."
msgstr "Huruvida att ge rättighet av typen \"visa\"."
#: acl.install:72
msgid "Whether to grant \"update\" permission."
msgstr "Huruvida att ge rättighet av typen \"uppdatera\"."
#: acl.install:79
msgid "Whether to grant \"delete\" permission."
msgstr "Huruvida att ge rättighet av typen \"radera\"."
#: acl.install:86
msgid "The priority of this grant record (for hook_node_access_records())."
msgstr "Prioriteringen för den här givna registreringen (för hook_node_access_records())."
#: acl.info:0
msgid "ACL"
msgstr "ACL (behörighetsvisning)"
#: acl.info:0
msgid "Access control list API. Has no features on its own."
msgstr "API (Programmeringsgränssnitt) för behörighetsvisning. Har inga egna funktioner."
#: acl.info:0
msgid "Access control"
msgstr "Behörighet"