如何以编程方式为角色分配权限?


26

我拥有一些权限,我希望通过编程方式将这些权限分配给某些角色,以便于安装。

因为我正在安装模块并同时创建权限和角色,所以我没有要设置权限的角色ID。到目前为止,我仅找到了以编程方式分配需要角色ID的角色的方法。

我想知道是否可以以某种名称(字符串)查找角色,检索角色ID,然后分配权限。只是感觉不对。


权限表使用角色ID,而不是角色名称。您需要获取角色ID,然后使用该ID添加权限。然后,权限表需要该权限的字符串以及实现该权限的模块的名称(至少在Drupal 7上如此);我不确定模块名称是否真的以任何方式使用。
kiamlaluno

关于应该使用的代码,您是否有不了解的特定内容?您使用了什么代码?显示您的代码将很有用;这将帮助谁回答建议您需要做什么(例如,报告代码中的错误)。
kiamlaluno

感谢您的回答。我想我必须在数据库中查找ID。它不应该那么困难。
vogelsang'2

Answers:


1

功能模块很好地做到了这一点,允许您一口气导出角色和权限(以及许多其他内容):

http://drupal.org/project/features

但是,如果您想推出自己的功能,请查看Permissions API:

http://drupal.org/project/permissions_api


2
问题是您在使用功能部件时不知道角色ID,因为在安装功能部件时会分配它们。因此,您需要找到ID以某种方式分配权限。它可能只是数据库中的查找。
vogelsang'2

24

功能对于这样的东西非常方便。但是,如果确实需要以编程方式创建角色和添加权限,则不必自己去挖掘数据库。

当您使用创建新的用户角色时user_role_save(),它将使用分配的新用户角色ID更新您传入的对象。您可以standard_install()在标准安装配置文件的功能中看到一个示例。

$admin_role = new stdClass();
$admin_role->name = 'administrator';
...
user_role_save($admin_role);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));

此示例说明您可以创建一个新的用户角色,然后访问其rid属性(由填充)user_role_save()。它还显示了如何使用来向该角色添加权限user_role_grant_permissions()。在这种情况下,它会授予“管理员”角色所有可用权限。

如果需要获取其他人创建的用户角色的ID,则可以使用user_role_load_by_name()获取该用户角色的对象。然后,您只需使用即可获取ID $role->rid




20

我想添加一个代码示例,该示例更接近于原始问题,即如何以编程方式将权限分配给现有角色。

您可以使用角色名称查找角色,检索角色ID,然后按以下方式分配权限(例如,在hook_update实现中):

function custommodule_update_7001() {
  $permissions = array('view my custom entity');
  foreach(array('anonymous user', 'authenticated user') as $role_name) {
    $role = user_role_load_by_name($role_name);
    user_role_grant_permissions($role->rid, $permissions);
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.