关于 RBAC 的一点疑问

关于角色

我发现我无法动态的创建角色。
比如说现在有个“admin”的角色,那么在代码里需要硬编码

if ($user->is('admin')) { // you can pass an id or slug
    // or alternatively $user->hasRole('admin')
}

我在想这个rbac是不是像linux一样,root,owner,others这样,角色是固定的,如果需要增加角色,就要修改代码?而且如果是这样的话,类比权限,似乎也是要预定义,并不能动态的在管理面板直接添加?当前的权限只能是已经定义权限的子集?

if ($user->can('create.users') { // you can pass an id or slug
    //
}

我的疑问只是,权限列表和角色列表是预定义的不?还是我理解的不对,不太清楚正确姿势是什么?

轮回几多到凡尘,轮回几多少一人。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5
leo

RBAC是不会去判断用户角色的,也就是说代码中不应该出现$user->is('admin')这样的,RBAC判断的是角色所拥有的权限。通常会有一张表来记录一个角色拥有哪些权限,所以角色列表是可以在管理面板增删,并且赋予指定权限的。

通常来说权限列表是写死的,除非你写一个权限框架,使用类似AOP这种方式来hook所有的操作。

7年前 评论

@leo 谢谢解答,我再缕缕。

7年前 评论

楼主看你使用的是geniusts/roles权限管理,其中有两个表,一个是peimission_roles表,另一个是permission_users表,那么问题来了,为何要创建permission_users表呢,?权限管理不是应该只维护角色-权限表吗?怎么还会有一个权限-用户表,我脑子有点蒙,,求解答。。

7年前 评论

@米休love 这个不是固定的,你直接给用户添加权限也是可以的。假如用户有角色A可以增加,角色B可以删除。但是现在需要修改的权限,又不想增加角色,你就可以直接分配权限给用户了。我是这么理解的,仅供参考。

7年前 评论

@米休love 我觉得比较多余,但是可能是为了这样的需求:给用户开个特权。比如,用户A的角色是“审校”,但是想给他一个“删除贴子”的权限。

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!