fleaphp权限控制RBAC


fleaphp RBAC权限控制的原理就是就是事先设定好哪些角色可以访问什么,然后给用户相应的角色就可以
查找相关文章:fleaphp RBAC 权限控制

SHOP例子中的RBAC权限控制总结
第一,验证登陆

总的思想为,只要失败就再次显示登陆表单,用do{}while(false)控制,成功后则转向其它控制器,也就是跳出了do{}while(),成功的同事能用FLEA_Rbac的setuser把用户及角色信息写到session.
转向其它控制器后得到当前调度器的信息$dispatcher=$this->_getDispatcher();然后通过它判断用户根限。用户权限写在一个文件中,内容如下
<?php

function actionLogin()
    {
    //判断用户名密码是否正确
     do{
    $sysuers=&FLEA::getSingleton('Model_Users');
    $user=$sysuers->findByUsername($_POST['username']);
    //dump($user);
    if(!$user)
        {
        $error= '没有此用户';
        break;
        }
    if(!$sysuers->checkPassword($_POST['password'],$user[$sysuers->passwordField]))
        {
        $error='密码不对';
        break;
        }
    //用户名,密码对,则通过rbac保存用户信息
     $data=array(
     'USERNAME'=>$user['username'],
     'ID'=>$user['user_id'],
     );
     $rbac=&FLEA::getSingleton('FLEA_Rbac');
     $rbac->setUser($data,$sysuers->fetchRoles($user));
     //dump($_SESSION);
     //转向登陆成功后的控制器
     redirect(url('Show'));
     }while(false);
     //登陆失败,再次显示
     $ui=FLEA::initWebControls();
     include(TEMP_MODEL.'/modelLogin.php');

就是一个数组,可以通过$dispatcher->check('控制器','行为')判断当前用户的角色信息,有没有权限访问控制器,及其行为,实际上是自动判断的。
$dispatcher->check('控制器','行为')的目的是判断出当前用户没有权限,从而列出其能访问的连接

return array(
        'Login'=>array(
             'allow' => RBAC_EVERYONE,
            ),
        'Show'=>array(
             'allow'=>RBAC_EVERYONE,
             'actions'=>array(
                     'first'=>array('allow'=>'MANAGER'),
                     'second'=>array('allow'=>'SYSTEM_ADMIN,POWER_USER'),    
                     )
            ),
);

第二:修改用权限的问题
读出数据库中所有的权限信息及用户现用的信息

$rolemanager=&FLEA::getSingleton('Model_Roles');
        //读出所有的权限信息
        $roles=$rolemanager->findAll();
        //读出已有的权限信息
        $usermanager=&FLEA::getSingleton('Model_Users');
        $user=$usermanager->findByUsername('terry');
        for($i=0;$i


这样子$roles中包含所有的角色信息$userrole中包含用户现有的信息
然后下边这样子了就可以在出现选择框的时候列出所有的信息及用户现有的信息被选中 

$ui->control('checkboxgroup','roles',array('items'=>$roles,'key'=>'role_id','value'=>'rolename',
'multirow'=>true,'cols'=>2,'selected'=>$userrole))?>
当点击更新权限时
//取出用户
        $usermanager=&FLEA::getSingleton('Model_Users');
        $user=$usermanager->findByUsername('terry');
        //dump($user);
        //如果一个权限也没有
        $user['roles']=$_POST['roles'];
        if(count($_POST['roles'])==0)
        {
            $user['roles']=array();
        }
        //dump($user);
        //更新用户
        $usermanager->update($user);


这样子用户的权限就更新了

权限表如下:

return array(
        'Login'=>array(
             'allow' => RBAC_EVERYONE,
            ),
        'Show'=>array(
             'allow'=>RBAC_EVERYONE,
             'actions'=>array(
                     'first'=>array('allow'=>'SYSTEM_ADMIN,MANAGER'),
                     'second'=>array('allow'=>'SYSTEM_ADMIN,POWER_USER'),    
                     'third'=>array('allow'=>'SYSTEM_ADMIN,COMM_USER'),
                     'change'=>array('allow'=>'SYSTEM_ADMIN')
                     )
            ),
);

其原理就是事先设定好哪些角色可以访问什么,然后给用户相应的角色就可以