Laravel 5.2自定义用户权限检查

时间:2017-02-28 14:19:10

标签: php laravel laravel-5.2

我想进行权限检查,如果他们没有权限,将禁止用户访问某些页面和按钮。在我的数据库中,我有一个用户表,权限表,然后是权限表用于为每个用户分配权限。

现在,我有一个页面显示一个表格,其中包含所有数据摘要,并且有一组按钮(查看,编辑等),有些用户无法完成所有这些,所以我想要这些按钮隐形/禁用。我不希望他们访问与这些按钮链接的受限页面,如果他们在URL中键入它(例如public / admin / edit / id)。

以下是当前可用的权限

  PermissionID  PermissionName
        1            View
        2            Add
        3            Edit
        4            Delete

现在在我的permissions_user表中就像这样

   PermissionID   AccountID
        1             2

这是我控制器的一部分

public function showDetails($action, $id)
    {
        return view('pages.admin.form_details', ['action' => $action, 'id' => $id]);
    }

此示例函数将显示详细信息页面和返回操作(字符串可以是查看或编辑),然后检查显示视图或编辑页面是在我的刀片中完成的。如果可能的话,我想一次性进行检查(就像你登录每个页面一样,如果用户登录或不通过中间件登录)。我实际上尝试过zizaco委托,但我不明白如何实现它并最终将其从我的项目中删除。

我一直在考虑在每个页面控制器的show函数中做这样的事情。

if($action == "edit)
//check if edit permission exists for the authenticated user. if not abort and show error page.

我认为这样做效率低,重复性差。会有更好的解决方案吗?或者我可以更容易整合一个包?

3 个答案:

答案 0 :(得分:2)

Laravel 5.2具有适当的功能:Authorizations

我更喜欢使用策略来定义功能,因为如果您的应用程序增长,它们可以更具可扩展性。

  1. 注册政策

    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];
    
    public function boot(GateContract $gate)
    {
            $this->registerPolicies($gate);
    }
    
  2. 定义政策

    public function index(User $user)
    {
        return // your validation;
    }
    
    public function create(User $user)
    {
        return // your validation;
    }
    
  3. 检查政策

  4. 在您的控制器中:

    public function store(ModelRequest $request)
    {   
        $this->authorize('create', $model);
        // your code to create a new model
    }
    

    在您看来:

    @can('create', $post)
       <!-- If user can create a model -->
    @endcan
    

    重要的是检查控制器中的策略,以这种方式使用它,如果用户没有正确的权限,则不允许用户执行任何后续步骤。

    另一方面,其他SO用户提到了一些软件包,但您的请求非常简单,因此您可以使用Laravel的授权。

答案 1 :(得分:0)

Laravel 5.2有一个内置的授权方法:

https://laravel.com/docs/5.2/authorization

政策特别好,它们代表了您正在寻找的权限类型。

如果您需要更多功能,请通过spatie查看laravel-permission package,它会添加许多功能,例如角色管理。

答案 2 :(得分:0)

Laravel包含一个应该根据需要运行的授权系统。你已经检查过了吗? https://laravel.com/docs/5.2/authorization

相关问题