如何以编程方式分配给角色的权限? -- 7 领域 和 users 领域 drupal 相关 的问题

How to assign permissions to roles programmatically?


26
vote

问题

中文

我有一些权限我想以编程方式分配给某些角色以便更容易安装。

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

我想知道我是否有一个以某种方式查找名称(字符串)的角色,检索角色ID,然后分配权限。它只是不觉得。

英文原文

I have some permissions that I would like to assign to some roles programmatically for easier installation.

Because I'm installing the module and creating both permission and roles, I don't have the role id's, where I want to set the permissions. So far I have only found ways to assign roles programmatically that need the role ID.

I wonder if I somehow could look up the roles with their name (string), retrieve the role ID and then assign permission. It just doesn't feel right.

     
     
     

回答列表

1
 
vote
vote
最佳答案
 

功能模块非常好,允许您在一个下降中导出角色和权限(以及大量的其他东西):

http://drupal.org/project/features

但如果您想滚动自己的签出权限API:

http://drupal.org/project/permissions_api

 

Features module does this quite nicely, allowing you to export roles and permissions (and lots of other stuff) in one fell swoop:

http://drupal.org/project/features

But if you want to roll your own check out Permissions API:

http://drupal.org/project/permissions_api

 
 
 
 
26
 
vote

功能非常方便。但是,如果您确实需要创建角色并以编程方式添加权限,则不必使用自己的数据库挖掘。

当您使用 user_role_save() < / code> ,它将使用分配的新用户角色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')));   

此示例显示您可以创建新的用户角色,然后访问其 99887663 属性,该属性由 user_role_save() 填写。它还展示了如何使用 user_role_grant_permissions() 向该角色添加权限。在这种情况下,它授予"管理员" 角色所有可用权限。

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

 

Features is pretty handy for stuff like this. However, if you do need to create roles and add permissions programmatically, you don't have to go digging through the database on your own.

When you create a new user role with user_role_save(), it will update the object you passed in with the new user role id that was assigned. You can see an example of this in the standard_install() function in the Standard installation profile.

$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'))); 

This example shows that you can create a new user role, then access its rid property, which was filled in by user_role_save(). It also shows how to add permissions to that role with user_role_grant_permissions(). In this case, it's granting the 'administrator' role all available permissions.

If you need to get the id of a user role created by someone else, you can use user_role_load_by_name() to get the object for that user role. Then you just grab the id with $role->rid.

 
 
   
   
21
 
vote

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

您可以使用其名称查找角色,检索角色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);   } }   
 

I'd like to add a code example that is closer to the original question on how to assign permissions to existing roles programmatically.

You can look up the roles with their name, retrieve the role ID and then assign permissions as follows (for example in a hook_update implementation):

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);   } } 
 
 

相关问题

4  即使用户有权“访问内容概览页面”,也缺少“查找内容”  ( Find content missing even though user has permission access the content overv ) 
问题:用户的"添加内容" 菜单项可用,但"查找内容" 不是。 用户有角色内容编辑器。内容编辑器具有"访问内容概述" 页面的权限。用户可以访问 http://example.com/admin/content 。 清除所有缓存都无法解决问题。 ...

5  如何在drupal_add_tabledrag()中使用子组  ( How to use subgroups in drupal add tabledrag ) 
我正在尝试使用子组使用Drupal表拖动主题的表单。我的形式包括一个"员工" 列表,需要分配给不同的"部门" 。一旦他们在部门内部,员工的顺序并不重要。 管理/结构/块表类似于我正在寻找的东西,但只有区域的选择框,没有权重。 我在这里看过文档: http://api.drupal.org/api/drupal/inc...

1  如果用户获得新角色,如何设置电子邮件通知?  ( How to set up an email notification if a user gets a new role ) 
我在d7上。如果他们收到了新角色,我想通知用户。对我如何这样做的建议?谢谢。 ...

1  Drupal_add_css现在在缓存模式下工作  ( Drupal add css does now work when in cache mode ) 
我正在尝试通过drupal_add_css和drupal_add_js添加jQuery插件,如下所示: drupal_add_css($path = 'sites/all/libraries/gips/css/gips.css', $type = 'file', $media = 'all', $preproce...

6  将字段添加到词汇本身  ( Add field to vocabulary itself ) 
我有一个我想在词汇表中添加字段的情况。换句话说,我需要一个正常出现在 $did0 的形式上的可编辑字段,而不是在词汇表中出现每个术语的字段。不幸的是, $did1 $did1 $did2 的列对于我需要的东西而言过于有限。 是什么最好的方法?如果可能的话,我想避免使用自定义模块进行自定义表,用于词汇编辑页面的形式...

15  裁剪时更改图像背景颜色  ( Change image background colour when cropping ) 
在裁剪小于作物尺寸的图像时,是否可以将黑色背景颜色(例如白色)更改为另一种颜色(例如白色)? 我在drupal 7中使用"图像样式" 设置将图像缩放到正确的宽度,然后裁剪以获得所需的高度。这导致一些具有真正看起来不错的黑边的图像(并且客户不喜欢)。 将欣赏到修复这一点的任何其他建议。 ...

1  在维护页面中添加Drupal站点宽联系人表格  ( Add a drupal site wide contact form to the maintenance page ) 
如何将Drupal站点广告表单添加到维护页面? 我目前在我的主题中使用自定义维护 - page.tpl.php模板页面。 ...

4  使用Drupal 7从同一视图中公开两个过滤器块?  ( Expose two filter blocks from the same view using drupal 7 ) 
我不确定如何克服这个。到目前为止,我已经通过简单地重复观点来设法这样做,但这不是一个好主意。 视图需要有两个曝光的过滤器。这些块被风格不同,坐在站点的不同部分中,因此他们需要独立。 可以从一个视图中公开两个过滤器块? ...

10  如何将字符串翻译成Drupal.locale.strings?  ( How do i get translated strings into drupal locale strings ) 
所以我试图在一些自定义JavaScript代码中使用Drupal.t()函数(在我的主题中)。 如何获取我需要填充在drupal.locale.strings对象中的字符串?我看到有一些字符串,但当然无法加载整个数据库。添加到它是什么最好的方法?我想使用php t()函数,以便在翻译界面中添加了所添加的字符串。 ...

3  视图排序标准:上下文过滤器多个值订单  ( Views sort criteria contextual filter multiple value order ) 
我的视图通过节点ID在节点的集合中提取。我正在使用Node:NID过滤器,并设置它以允许以"+" 符号分隔的多个输入。 (443 + 112 + 2060 ......)这部分效果精美。 我想知道我是否可以按NID的顺序对视图进行排序?如果我删除所有排序标准,但默认情况下,我认为可能会这样做,但没有快乐。我正在寻找...

2  从表单数据生成条形码并将表单数据提交到数据库(视图)  ( Generate a barcode from form data submit form data to database for views ) 
我正在尝试在 http:// qr上创建一个条形码生成器。 insready.com/node/add/vcard 。使用Drupal 7&amp创建此发生器;条形码贡献模块(由模块的创建者)。 我需要我的应用程序要做的是接受许多用户数据输入到表单中的项目,将字段条目连接到条形码输入字段中,然后在表单提交时生成条形码...

4  Formapi的日期字段,删除日字段?  ( Date field in formapi remove day field ) 
在Formapi中使用"日期" 字段,有些可以设置以隐藏日志显示的日志吗? ...

20  以编程方式还原功能组件  ( Revert a feature component programmatically ) 
我有一个使用安装配置文件安装的功能。但我总是必须去恢复特定的组件,以便它不再被覆盖(例如,出现特征的块)。我只是想知道我是否可以在安装配置文件中使用代码本身以编程方式通过该步骤。 在下面的屏幕截图中,我已经显示了必须以编程方式恢复的组件(在屏幕截图中,它已经恢复后,所以复选框不可用)。 ...

3  将JS连接到Tablyelect复选框?  ( Attach js to tableselect checkboxes ) 
使用drupal 7 tableselect form字段,有没有办法将JavaScript事件附加到复选框? 我正在尝试构建一个自定义定价表,允许您添加不同的选项,该选项修改显示的总计。检查选项时,我需要通过AJAX传递值并返回新的总价格。不确定如何附加事件。 ...

2  用“自我”的内容创建一个视图  ( Create a view with the contents of self ) 
我正在创建一个视图,该视图将列出所有当前用户的特定内容类型的提交。它被称为"我的提交" 。 但是,我找不到一种方法来过滤所有结果的方法,以"作者是我" 。我在哪里可以实现这样的事情? ...

1  接近客户要求创建测验的策略  ( Strategies for approaching a client requirement to create quizzes ) 
我的客户要求似乎伸展Drupal的边界,并强迫我以不同的方式思考如何接近问题。我正在寻找以下要求的潜在替代品和策略,以便我可以正确: 我的客户实际上希望能够创建测验。我们无法使用流行的测验模块,因为它尚未在任何情况下都没有DRUPAL 7版本,并且在任何情况下都不允许在一次上输入多个问题。探索了其他模块替代方案,如封...

0  使用视图钻取分类节点计数  ( Drill down taxonomy node count using views ) 
我不知道是我是唯一一个拥有这个问题的人,但我的问题似乎很常见。我只是找不到这里的解决方案和谷歌。 我的网站有分类菜单: 分类广告 电子产品 autos 乔布斯 会计 信息技术 我只想向有孩子的每个术语展示摘要。例如,当您单击分类时,它应该如下所示: 电子(160) autos(310) 当您单击autos(3...

10  以编程方式设置字段的默认值  ( Programmatically set the default value for a field ) 
在Drupal 6中,我们可以使用PHP设置默认值,但不能与Drupal 7一起使用相同的代码。 我正在尝试通过 hook_form_alter() 这样做,但代码不起作用。 function my_form_alter(&$form, &$form_state, $form_id) { dsm($form)...

7  使用PHP打印评论表格  ( Print the comment form with php ) 
我正在尝试用以下代码打印评论表格。 <?php print drupal_get_form('comment_form', array('nid' => $row->nid), t('Post new comment')); ?> 所有我得到的是重复40次的错误: 警告:尝试在commend_...

1  IIS 7中的“站点”文件夹的虚拟目录  ( Virtual directory for sites folder in iis 7 ) 
我正在使用IIS 7.5在Windows上运行Drupal 7。这不是我可以改变的东西,我公司需要改变。一切都已经运行了很棒的很棒。 我想设置环境,以便"站点" 文件夹在Drupal Core之外,因此升级核心只需要更改应用程序的物理路径,而不需要复制版本之间的"站点" 文件夹。我一直在做一些阅读,这似乎是一个非常简...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.