主题
权限介绍
权限是大家所熟知的RBAC
权限,即用户一对多角色,角色一对多权限。如果对 RBAC
权限没有足够的了解可以看一下这篇基于角色的访问控制 的 blog。
基本约定
- 超级管理员不受任何权限控制
- 对于
RBAC
权限,GET
请求是默认放行,不受权限限制
权限模块
catchadmin
默认不开启权限模块,也不使用动态菜单。所以第一步应该是开启模块
php
php artisan catch:module:install permissions
TIP
开启之后如果没有权限菜单,可以刷新一下
中间件
权限模块提供了权限控制的中间件,如下
php
class PermissionGate
{
public function handle(Request $request, \Closure $next)
{
// get 请求全部通过
if ($request->isMethod('get')) {
return $next($request);
}
/* @var User $user */
$user = $request->user(getGuardName());
// 没有权限则被拦截
if (! $user->can()) {
throw new PermissionForbidden();
}
return $next($request);
}
}
添加权限
其实上面的稍做了解即可,最重要还是看看权限是由哪些元数据组成。因为这是前后端的项目,所以比一般渲染的要复杂一点,但并不是不能做,前提一定要先去了解 vue 的路由
相关知识。首先找到权限管理/菜单管理页面,点击新增,看到以下界面
CatchAdmin
将权限分为三种类型
目录 目录仅仅就是一级菜单
菜单 菜单就是主要的页面
按钮 每个页面的操作,每个按钮都对应后端的控制的一个
action
,这个非常重要路由
Path
对应前端vue
路由的path
组件 对应前端
vue
路由的component
- 目录类型一般都是选择 Layout 组件
- 菜单类型则是选择对应页面的组件
传统的 Laravel
项目,RBAC
都可以通过 Controller
来控制页面以及页面操作的权限控制。其实前后端分离的项目也是一样,只不过对于传统的渲染项目,页面也是由 PHP 控制的。前后端分离之后,页面都交给了前端,但是数据操作并没有交给前端,所以对于前后端分离的项目,RBAC
主要的作用就是控制API
访问,上面的几个概念都是由前端控制的。后端的着重点在按钮类型
, 即对控制器的action
控制。 所以后端需要添加控制器的每一个action
操作, 针对这些 action
进行权限赋予。
权限判断
catchadmin
使用模块化,所以权限标识的格式是这样的
module@controller@action
例如权限模块的角色列表,最后进行权限判断的格式就是这样的
php
Modules\permissions\Http\Controller\RolesController@index
当前用户是否有权限
php
Auth::user()->can(string $permission = null);
- permissions 如果需要判断某个特定的权限,permission 参数格式: module@controller@action, 例如
permission@Roles@index
用户的权限
php
/*@var Model\Roles $user*/
$user->withPermissions()->permissions;
角色权限
php
/*@var Model\Roles $role*/
$role->getPermissions()