2012-02-09 105 views
0

Yii对我来说非常新颖。我正在开发一个真实世界的例子。 我有一个表,因此一个模型,称为用户从数据库中获取数据。数据库中的三个主要字段是用户名,密码和userRole。 用户名和密码工作得很好。 我需要查看数据库中的userRole并基于此,为用户分配一个角色。 例如用户的userRole字段== 1,用户是admin,可以创建,读取,更新和删除(CRUD)。 但是,如果用户的userRole == 2,用户可以更新并创建但不能删除。 我试图在UserController.php中使用'expression'ib accessRules()来做到这一点,但它没有奏效。 然后我读到它,发现我应该做的角色。 这就是我写的:如何从Yii的数据库中获得用户许可

public function accessRules() 
    { 
     $auth = Yii::app()->authManager; 

     $auth->createOperation('createUser','create a user'); 
     $auth->createOperation('updateUser','update a user'); 
     $auth->createOperation('deleteUser','delete a user'); 

     $role=$auth->createRole('creator'); 
     $role->addChild('createUser'); 

     $role=$auth->createRole('updater'); 
     $role->addChild('updateUser'); 

     $role=$auth->createRole('deleter'); 
     $role->addChild('deleteUser'); 


     return array(
................................ 
     array('allow', 
      'actions'=>array('create','update'), 
      'users'=>array('@'), 
      'roles'=>????, 

..................... 

???是我不知道该怎么做的地方。 我是否在正确的位置/文件中定义了createOperation/addChild? 如何在返回数组中使用'角色'? 也应该从哪里得到数据库的userRole?

我拼命地寻找答案,因为Yii的论坛不活跃

谢谢

回答

0

操作和角色的创建是一次性的活动(只要您创建或编辑)。您需要有一个单独的方法,您将调用一次。

如果你想有一个基于角色的访问系统,你需要添加额外的表到你的数据库。模式可以在文件夹 - yii/framework/web/auth/schema.sql中找到。

但要实现RBAC是使用类似权利的延伸最简单的方法 - (或通过已知的用户ID)http://www.yiiframework.com/extension/rights/

0

必须分配角色(一个或多个),以登录用户

$auth->assign('creator',user()->id); 
$auth->assign('updater', 102); //102 as user id 
//... 

而且在accessor你必须写

'actions'=>array('create','update'), 
'roles'=>array('creator','updater'), 

这是answeryou正在寻找?

相关问题