欢迎各位兄弟 发布技术文章
这里的技术是共享的
user_access($string, $account = NULL)
$string: The permission, such as "administer nodes", being checked for.
How can I find out a list of available $string values for user_access() function?
正确答案
As long as every module can define their own permissions, there is not a "strict" list of those string. You will need to "construct" it if you really need to have such a list programmatically.
You can run this script in a /devel/php page. (Of course, you need the Devel module.)
// Render role/permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
print_r($module);
// Drupal 6
// if ($permissions = module_invoke($module, 'perm')) {
// print_r($permissions);
// }
// Drupal 7
if ($permissions = module_invoke($module, 'permission')) {
print_r($permissions);
}
}
//下面是得到 权限 和角色的对应关系 有大用
//但是 如果一个权限 未分配给任何角色 好像得不到这个权限
//好像如果一个权限 未分配给任何角色 在数据库的表中就没有这个权限数据function _setSameValue(&$value, $key, $sameValue){$value = $sameValue;}function _getMonthTongjiInfo(){ if(user_access('administer')) { $result = db_query("SELECT p.perm,r.name FROM {role} r INNER JOIN {permission} p ON p.rid = r.rid"); $rolePerms = array(); $permRoles = array(); $tmppermRoles = array(); while ($row = db_fetch_object($result)) { empty($rolePerms[$row->name]) && $rolePerms[$row->name]=''; empty($rolePerms[$row->perm]) && $rolePerms[$row->perm]=''; $rolePerms[$row->name] = $rolePerms[$row->name].','.$row->perm; $tmppermRoles = array_flip(explode(', ', $row->perm));
//array_walk 就是能给数组每个元素进行处理吧 处理函数是_setSameValue array_walk($tmppermRoles, '_setSameValue', $row->name); //array_merge_recursive() 如果键值相同将把两个值合并在一起,形成一个新的数组,并以原有的键名作为数组名。 $permRoles = array_merge_recursive($permRoles,$tmppermRoles); } // $permRoles 里面的元素值 可能是数组 ,把元素弄成字符串 foreach($permRoles as $key=>$value) { is_array($value) && $value = implode(', ',$value); $permRoles[$key] = $value; } $export = kprint_r($rolePerms, TRUE); print $export; $export = kprint_r($permRoles, TRUE); print $export; //$export = kprint_r($perms, TRUE); //print $export; }}
//下面是得到所有启用到的权限
if(user_access('administer')) {
$result = db_query("SELECT p.perm,r.name FROM {role} r INNER JOIN {permission} p ON p.rid = r.rid");
$perms = array();
while ($row = db_fetch_object($result)) {
$perms += array_flip(explode(', ', $row->perm));
}
dsm($perms);
}
//这个是执行url 最初执行到的步骤
//第一次参数是 getrolebypermission 第二个参数是 权限的名称 (我们这里只用到第二个参数)
来自 http://drupal.stackexchange.com/questions/2764/how-can-i-find-out-a-list-of-available-string-values-...
来自 http://drupal.stackexchange.com/questions/2764/how-can-i-find-out-a-list-of-available-string-values-for-user-accessstring-f