角色与权限

1.编写代码的问题

(1)seagull框架中默认有三种角色:guest,member,admin.下面介绍这三种角色的用户

  • guests: 它是由‘guest’角色提供的一些权限的生成集。例如,所有的guests可以或不可以所执行的都是完全相同的事。Demian所创建的权限是根据在新的权限系统之前,guests能够做些什么。
  • members:他们把'member'角色的权限集合复制过来后,拷贝到user_permission表的具体某个usr_id下.因此你可以认为一个角色就一个权限集合的模板,并且每个用户的权限设置是它们所属的角色的特殊化.如果必要,每个用户的权限集合可以被重新调整,换句话,他们可以基于角色的权限集增加或删除个别的权限,所以即使两个用户同属于'member'或其它角色,也不完全拥有相同的权限集合.
  • admin:完全没有权限限制,他们可以执行任何操作,你可以称它为伪角色.

除了那些还需要说的是:

*  roles映射到存放在Manager类中action方法,即,如果你有一个Piggy Mgr类,action方法如下:goesToMarket(),_staysHome()和_eatsRoastBeef(),则在系统中,必须给每一个方法增加对应的权限项.以便于用户权限的管理.

*  在系统中可以有任何数量的权限项/角色

*  角色可以被复制

(2)方法的调用

调用某一个类的方法都需要验证用户是否有权限使用这个方法,代码如下:

 
if (SGL_HTTP_Session::hasPerms($perm)) {
 
     $this->$methodName($input, $output);
 
} else {
     Base::raiseError('you do not have the required perms for ' . 
     $className . '::' .$methodName, SGL_ERROR_INVALIDMETHODPERMS);
}}
 
function hasPerms($permId)        
    {
        //  if admin role, give perms by default
        if (@$_SESSION['rid'] == 1) {
            $ret = true;
        } else {
            if (is_array($_SESSION['aPerms'])) {
                $ret = in_array($permId, $_SESSION['aPerms']); //验证已创建的全局权限数据是否包含该方法
            } else {
                $ret = false;
            }
        }
        return $ret;
    }

SGL_Controller::_initPerms()方法调用PermissionMgr.php类中的retrieveAllPerms()方法,retrieveAllPerms()方法在第一次请求时,全局权限数组就已创建的.倘若你缓存被激活,到那时隐藏数据到磁盘作为后来的调用.

2.权限

2.1.命名约定

命名约定是modulmgr_function.

因为faq模块中的权限项如:

  • faq_list
  • faq_add
  • faq_insert
  • faq_delete

一个方法一个权限

2.2.模块范围的权限

如果你想准许一些用户有权使用一个模块的所有方法,你必须调用它modulmgr,再已faq模块为例,它将是faqmgr.

2.3.添加权限

使用detect & add函数,你可以很容易地为系统添加权限.

它扫描所有已安装的模块,并输出一系列新的权限,你可以通过少数的鼠标点击来添加它们.

2.4.删除孤儿权限

使用删除孤儿函数是相当简单的.它将显示一系列旧的权限,你可以通过少数的鼠标点击来删除.

3.角色

3.1.创建角色

一个角色仅仅是某些权限的一个组,当创建新的用户时,这个新的用户就采纳了所属角色‘模板’的所有权限,然后你可以根据需要增加或删除这个用户的个别的权限项.注意:当一个角色的权限改变时,已创建的用户的权限不会随之改变.

为站点创建新的角色,只要使用Users and Security模块的Role部分的工具.很简单的:

  • 复制'member'角色
  • 根据自己需要重命名
  • 点击角色的'permissions → change'
  • 从左框中移动新的权限到右框中,并点击'提交'

注意:admin按钮在页面的顶端,有时被导航栏隐藏 - 你或许只能修改默认的导航栏

3.2.同步权限已被更新的用户

由于它所包含的是权限而不是角色,它被保存到基于每个用户,修改权限后,你必须同步用户的角色.

使用角色与权限同步的功能就可以执行.

你可以选择要你要同步的用户,如果你将他们同步到当前或其它的角色,或你想添加丢失的权限,删除额外的权限或两者兼有.

3.3.将文章中应用权限

Q:是否有方法控制文章分类的权限?

A:权限管理,组成Publisher模块的一部分.你基本上需要决定你的文章以哪种分类发表,点击'permissions'按钮,然后删除没有权限访问给定分类的角色.此时,这种方法只适合浏览文章,不适合编辑.

 
rolesandpermissions.txt · 最后更改: 2010/05/30 00:21 (外部编辑)
 
Except where otherwise noted, content on this wiki is licensed under the following license:GNU Free Documentation License 1.2