Laravel 中基于角色的 ACL

Posted

技术标签:

【中文标题】Laravel 中基于角色的 ACL【英文标题】:Role based ACL in Laravel 【发布时间】:2017-12-24 07:23:42 【问题描述】:

我正在为 API 实现基于角色的 ACL,并且我有用于用户、角色、页面、页面操作(查看、添加、编辑、删除)的表以及与页面操作的角色关联。现在,我如何使用这些表编写授权门或策略并将其用于中间件?欢迎提供任何示例。

我浏览了授权文档,但不知道如何定义能力并在基于角色的场景中检查它们。

【问题讨论】:

【参考方案1】:

以这个源代码为例:Spatie/Laravel-permission

也是一个中间件检查角色或权限的例子:

can.php

public function handle($request, Closure $next, $permission)
       
    if(!$request->user()->can($permission))
        flash()->warning(trans('alert.noAccess'));
        return abort(403);
    

    return $next($request);

role.php

public function handle($request, Closure $next, $role, $permission = null)

    if (auth()->guest()) 
        return redirect(route('auth.login'));
    

    if (!$request->user()->hasRole($role)) 
        abort(403);
    

    return $next($request);

【讨论】:

它使用 laravel 授权门,它是在 Laravel 5.1.11 中添加的,因此它将在 5.2 中工作

以上是关于Laravel 中基于角色的 ACL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel spatie 中分配多个角色和基于多个角色的权限?

基于用户角色的 Laravel voyager 策略

Entrust是一种为Laravel5添加基于角色的权限的简洁而灵活的方法。

Laravel Quickadmin - 用户角色重定向

Laravel 和 MongoDB 以及高级角色/权限系统

Laravel系列之CMS系统学习 — 角色权限配置