yii基于用户组而不是角色验证系统

时间:2014-03-18 12:05:55

标签: php authentication yii rbac rights

我正在尝试在此框架上构建自己的自定义身份验证系统。 我已经建立了Yii的RBAC。它运作良好。它给了我角色。 后来我编辑了代码,现在我可以获得用户ID和用户名。 但我想要的是有点复杂。 我不喜欢这个RBAC角色系统,因为你在代码中编写了固定的角色。

我的想法是拥有用户组ID的用户。在数据库中,我可以操纵每个用户组的功能。

因此,例如用户登录并想要创建新主题, 验证RBAC时使用用户组ID连接到数据库并根据此用户组获取所有数据。 然后它创建了类似的东西:

 $this->setState('create_new_topoic', <info from database);
 $this->setState('edit_topic', <info from database);
 $this->setState('view_topic'', <info from database);

然后在控制器和视图中的应用程序中,我将在任何地方使用

if (isset(Yii::app()->user->create_new_topoic) AND (Yii::app()->user->create_new_topoic>0))
{ show 'create new topic button' }

这是正常做法吗?我对如何对服务器和MYSQL的负载做出反应感兴趣。我正在重载我的应用程序或这样的系统可以让服务器处理?

2 个答案:

答案 0 :(得分:1)

你想要的是RBAC究竟能做什么。实际上,您向用户而不是GROUP提供ROLE。想法是:

  1. 创建您的操作(例如创建/更新)
  2. 根据您的操作创建适当的角色(例如,可以执行创建和更新的修改器)
  3. 为用户分配一个或多个适当的角色
  4. 无论何时/何时您都可以轻松检查用户对其角色的访问权限
  5. 在代码中说话:

    $rbac=Yii::app()->CAuthManager();
    
    1. $rbac->createOperation('create','This is a description for this operation')
    2. $rbac->createRole('modifier','This is a description for this role')
    3. $rbac->assign('modifier','USER_ID')
    4. $rbac->checkAccess('modifier')
    5. 请不要将自己限制在Yii提供的RBAC方法中。您可以在数据库中执行每个操作并编写自己的自定义方法。 (我的意思是,当您使用rbac时,您可以自定义使用它的方式。例如,将组视为角色)

      更清楚的是,您可以阅读Yii的RBAC文档:

      Yii's IAuthManager - RBAC

答案 1 :(得分:1)

RBAC工作正常。另一种方法是1)在登录时将用户类型分配给会话变量。 2)在视图中检查用户类型。用户表显然需要User Type列。我认为这种方法很好,它不会使服务器过载。当然它会增加几毫秒,但如果你想让相同的视图根据角色显示不同的东西,它是必需的。

在您的UserIdentity文件(/ protected / components)

public function authenticate()
{
    ....
        $this->setState('type', $user->type); //Set's Type here
        $user->save();
    ....
}

在您的视图/控制器中

<?php if (Yii::app()->user->type == 'Finance') : ?>
{some code}
<?php else: ?>
{other code}