-
Notifications
You must be signed in to change notification settings - Fork 1
权限及校验
王荣 edited this page Aug 23, 2019
·
2 revisions
权限支持等级关系.
一般的管理端模块权限分为以下三类,基于上图的基础:
- create/store/update :创建和修改权限
- destroy:删除权限
- index/edit/show:查看权限 通常情况下,一个模块只需要以上权限就够了. 如果有额外的接口,则需要创建额外的权限.
权限的创建常用的有两种:
- 直接使用管理端权限管理创建
- 跟随业务库,在seeder中编写对应的权限.便于安装该库时自动生成相应的权限. 如:
$parentId = $this->createPermissions("问题", "qa_questions", true, $parentId);
Permission::create([
'parent_id' => $parentId,
'order' => $this->order += 1,
"name" => "问题发布",
"slug" => "qa_questions.publish",
]);
说明:
Mallto\Admin\Seedern\SeederMaker
trait中包含创建权限的基础方法,即上面调用的$parentId = $this->createPermissions("问题", "qa_questions", true, $parentId);
则会创建:问题管理和相关的子权限(问题管理查看;问题管理创建/修改;问题管理删除)
trait SeederMaker
{
protected $routeNames = [
"index" => "查看", //列表页/详情页/show
"create" => "创建/修改", //创建页/保存/修改
"destroy" => "删除", //删除权限
];
/**
* @param $name ,权限名
* @param $slug ,权限标识
* @param bool $sub ,是否生成子权限
* @param int $parentId ,父权限id
* @param bool $closeDelete ,是否关闭创建子权限之`删除`权限
* @param bool $common ,是否是所有主体都默认有的公共权限
* @param bool $closeCreate ,是否关闭创建子权限之`创建/修改`权限
* @return int
*/
public function createPermissions(
$name,
$slug,
$sub = true,
$parentId = 0,
$closeDelete = false,
$common = false,
$closeCreate = false
) {
...
}
}
- 通过自动权限校验中间件(
AutoPermissionMiddleware
)来完成 - 项目拥有者(角色标识
owner
)拥有全部权限. - 理论上管理端的所有接口都要创建对应的权限配置,否则该接口就没有人能访问.
- 因为全新有父子等级关系,所以拥有父权限即可通过所拥有的子权限的校验.
- 注意如果重写了/admin路由,一定不能加入权限校验,因为管理端权限校验失败的默认跳转就是这里