防止普通用户进入管理页面

时间:2018-10-27 05:40:45

标签: php laravel

在模型中, User.php 我设置了一个函数调用 isStatus()

 public function isStatus(){
    return $this->status; // 1 of mysql table column name status, let say 0 is admin and 1 is normal user.

}

在控制器名称 LoginController.php 中,如果用户状态为 0将进入/ admin页面其他将进入/ page < / strong>表示主页。

    protected function authenticated($request, $user){

    if($user->isStatus('0')){
        return redirect('/admin');
    }else{
        return redirect('/');
    }
}

带有“状态”列的用户表为布尔值,但不起作用。

2 个答案:

答案 0 :(得分:0)

由于您正在使用Laravel,因此请重构一下代码。

您正在将参数传递给函数public function isStatus(),并接收任何参数并返回公共值。删除此功能。

auth()-> user()将为您获取连接的用户,您可以像这样访问状态属性

  

auth()-> user()->状态

您的函数应如下所示:

return auth()->user()->status ? redirect('/admin'): redirect('/');

您可以将此验证放入需要角色验证的所有控制器中。

如果您有兴趣,也可以开箱即用由外部供应商开发的一些模块,这些模块可以处理真正的专业验证并避免重复的代码。

检查一下

和@Kuebel的最爱

答案 1 :(得分:0)

您的函数isStatus()返回用户模型的状态值。

在控制器中,您正在使用参数调用该函数,但是该函数不接受参数。这将是正确的控制器代码

if($user->isStatus()){         //Call the function without a parameter. Since this returns boolean (0 or 1) you don't need to add == 0)
    return redirect('/admin');
}else{
    return redirect('/');
}

还有BTW:这种if的写作风格很短:

($user->isStatus()) ? return redirect('/admin') : return redirect('/');

详细了解here