php - 关于 RBAC 的一点疑问
PHPz
PHPz 2017-04-10 17:31:07
0
2
367

关于角色

我发现我无法动态的创建角色。
比如说现在有个“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 // }

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

PHPz
PHPz

学习是最好的投资!

reply all (2)
左手右手慢动作

题主可以看下Laravel-RBAC

回到题主问题:权限列表和角色列表是不是预定义的

回答肯定是否定的;

使用laravel的rbac-package为例:

创建一个角色

$adminRole = new Role; $adminRole->name = 'Administrator'; $adminRole->slug = 'administrator'; $adminRole->description = 'System Administrator'; $adminRole->save();

分配角色,你可以将一个或多个角色分配给任何一个用户

$user = User::find(1); $user->roles()->attach($adminRole->id);

设置权限

$createUser = new Permission; $createUser->name = 'Create user'; $createUser->slug = 'user.create'; $createUser->description = 'Permission to create user'; $createUser->save();

你可以在中间件中控制访问对象,你也可以在页面局部控制访问对象

    Peter_Zhu

    表设计:
    用户表 user(id, name)
    角色表 role(id, name)
    操作表 oper(id, name)
    用户对应的角色表 relation_user_role(user_id, role_id)
    角色对应的操作表 relation_role_oper(role_id, oper_id, value)

    //获取编号为1024的用户具有的操作权限 $user['operation'] = query(' select oper.name, relation_role_oper.value from user, role, oper, relation_user_role, relation_role_oper where relation_user_role.user_id = user.id and relation_user_role.role_id = role.id and relation_role_oper.role_id = role.id and relation_role_oper.oper_id = oper.id and user.id = 1024 '); function foo() { global $user; //执行foo函数体前先判断当前用户是否具有foo这个操作权限 if(!isset($user['operation']['foo']) || $user['operation']['foo'] != '1') { echo 'Operation not permitted'; exit(); } }
      Latest Downloads
      More>
      Web Effects
      Website Source Code
      Website Materials
      Front End Template
      About us Disclaimer Sitemap
      php.cn:Public welfare online PHP training,Help PHP learners grow quickly!