欢迎各位兄弟 发布技术文章
这里的技术是共享的
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