【问题标题】:CakePHP check user roleCakePHP 检查用户角色
【发布时间】:2011-11-05 10:31:30
【问题描述】:

如何检查当前登录的用户是否属于管理员角色。

我有两个表,一个用户表和一个角色表。在用户表中,我有一个名为role_id 的外键。管理员角色在角色表中的 ID 为 1。

1.) 我将如何在视图中进行此检查以显示管理员链接

2.) 我将如何在 app_controller 中进行此检查以防止访问所有具有 admin 前缀的操作?

我尝试过类似的方法:

public function beforeRender()
{
    $user = $this->Auth->user();

    if (!empty($user))
    {
        $user = $user[$this->Auth->getModel()->alias];
    }
    $this->set(compact('user'));


    if($user['Role']['id'] == 1)
    {
        $is_admin = true;
    }
}

然后我尝试使用is_admin 变量来检查应用程序

谢谢

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    一种方法是在控制器函数中设置一个变量

       function beforeFilter()
        {
        if($this->Auth->user('role_id')==1){
        $this->set("role",$this->Auth->user('role_id'));//it will set a variable role for your view 
         }
    else
    {
    $this->set("role",2);//2 is the role of normal users
    
    }
    
        }
    

    在您看来,您可以像下面这样测试这个变量

        <?php if($role==1){ ?>
          echo $html->link('view registered users',array('controller'=>'users','action'=>'admin_check_users'),array('title'=>'Users'));/provide a link for admin using html helper;   }
        else{
         echo $html->link('logout',array('controller'=>'users','action'=>'logout'),array('title'=>'Logout...'));//provide a link for normal users using html helper;   
    
    }
    ?>
    

    对于您的第二个答案...您可以这样做...

          function beforeFilter()
        {
        if($this->Auth->user('role_id')==1){
         $this->Auth->allow('admin_view','admin_controls');//put your all admin actions separated by comma
    
         }
    
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-16
      • 1970-01-01
      • 2016-08-28
      • 2020-08-04
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多