我拥有一些权限,我希望通过编程方式将这些权限分配给某些角色,以便于安装。
因为我正在安装模块并同时创建权限和角色,所以我没有要设置权限的角色ID。到目前为止,我仅找到了以编程方式分配需要角色ID的角色的方法。
我想知道是否可以以某种名称(字符串)查找角色,检索角色ID,然后分配权限。只是感觉不对。
我拥有一些权限,我希望通过编程方式将这些权限分配给某些角色,以便于安装。
因为我正在安装模块并同时创建权限和角色,所以我没有要设置权限的角色ID。到目前为止,我仅找到了以编程方式分配需要角色ID的角色的方法。
我想知道是否可以以某种名称(字符串)查找角色,检索角色ID,然后分配权限。只是感觉不对。
Answers:
功能模块很好地做到了这一点,允许您一口气导出角色和权限(以及许多其他内容):
http://drupal.org/project/features
但是,如果您想推出自己的功能,请查看Permissions API:
功能对于这样的东西非常方便。但是,如果确实需要以编程方式创建角色和添加权限,则不必自己去挖掘数据库。
当您使用创建新的用户角色时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
。
我想添加一个代码示例,该示例更接近于原始问题,即如何以编程方式将权限分配给现有角色。
您可以使用角色名称查找角色,检索角色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);
}
}