美文网首页
权限管理RBAC

权限管理RBAC

作者: Julian1009 | 来源:发表于2016-12-29 03:14 被阅读0次

基于角色的访问控制(Role-Based Access Control

项目的框架用的是优雅的Laravel,这里打算基于Laravel写一个权限管理系统

建表:

Table Users( 用户表 )

id name phone email password
1 foo 8888 8888@qq.com md5(123456)

Table Roles( 角色表 )

id role level permission
1 admin 0 1,2,3
2 user 1 4,5
3 user 2 4,5,6

Table UserRole( 用户-角色关系表 )

id user_id role_id permission
1 1 2 4,6

Table Permissions( 权限表 )

id parent_id name url
1 0 后台首页 backend
2 0 权限管理 permissionManagement
3 0 员工信息 stuffManagement
4 0 个人信息 myInfo
5 4 个人相册 photograph
6 0 其他模块 module

思路:

在项目登录的使用者分用户( user )和管理员( admin ),其中用户又分等级。这样可以适用于按用户的等级分配权限。

用户表( Users )只存放用户的相关信息,有用户名( name )、手机号( phone )、电子邮箱( email )字段。
角色表( Roles )只存放角色的信息,有角色名( role )、角色对应的权限( permission )。

用户角色关系表( UserRole )用来连接两个表,字段有user_id对应用户、role_id对应角色,这里我又加了一个权限字段( permission )。这个字段是实际分配给用户的权限,在获取用户权限的时候也是获取关系表中的权限字段。这是为了更自由的分配给用户权限,如果需要减少或增加某个用户的权限时修改的是这个字段的值。
上面表的示例中,permission字段值为“4,6”,这表示user_id为1,角色为user等级为1的用户只有访问个人信息和其他模块的权限,个人信息的二级菜单个人相册( photograph )的权限并不拥有。

其中,权限字段( permission )的值是权限表( Permissions )的id,用“,”分隔开,组成字符串存到一个字段。

权限表( Permissions )只是存放权限得列表,字段有parent_id、权限名( name )、路由( url )。若有多级的权限,就可以自关联,parent_id存放父权限的id值。
上面表中示例的数据,id为1、2、3的数据是后台admin的路由权限,剩下的都是用户的权限。在这个表中,只是list的作用。

实现:

这里用到Eloquent的模型关联,将几个表联系起来。具体使用见Laravel文档Eloquent: 关联

route.php文件中,用户user的登录后的路由放在路由组user中,用到user的中间件。
Route:

Route::group([ ['middleware' => 'user'] ], function(){
});

Middleware:

public function (){
    $user = Session::get( 'user' );
    if(empty( $user )){
        //重定向到错误提示页面,或返回登录页
    }
    //先获取当前路由
    //再获取当前用户的角色的所有权限路由$array
    //判断是否in_array(),是则进行跳转,否则返回上页。
}

public function getPermission(){
    //获取当前用户的角色的所有权限
}

UserController:

public function login(Request $request){
    $phone = $request->input( 'phone' );
    $password = $request->input( 'password' );

    $res = User::where( ['phone' => $phone, 'password'=> $password] )->first();
    if(empty($res)){
        return false;
    }
    $arr = User::getUserPermission($res);
    return $arr;
}

Model/User:

public function getUserPermission($object){
    if(empty($res)){
        return false;
    }else{
        //获取UserRole表中permission的权限,和用户其他信息组成数组$array存于Session中
        Session::set( 'user', $array );
        return $array;//并返回数组
    }
}

后台权限管理

两个模块,用户管理、权限管理

用户管理

这个模块管理用户的所有信息,并且可以添加或去掉某项权限。也可以为不同的用户级别,定制添加个别权限,以达到人性化。当然这个权限存储于UserRole关系表中,

权限管理

这个模块管理所有的权限,可以增删改现有的基本的权限名称和路由,可以增加二级的权限。

以上是我在做项目的场景中应用的权限管理,当然也希望能适用更多场景。
这里也是抛砖引玉,大家有更好的建议请务必告诉我,我也会持续优化本文。

相关文章

  • RBAC-基于角色的权限管理

    RBAC-基于角色的权限管理 RBAC权限管理 RBAC(Role-Based Access Control,基于...

  • 服务端开发资料搜集

    RBAC 角色权限系统 RBAC 介绍,案例讲解shiro权限控制实战shiro Demo(管理员帐号:admin...

  • 基于RBAC的用户权限管理系统

    目标 搭建一个基于 RBAC ,支持功能权限 + 数据权限的统一用户权限管理系统。 RBAC 简介 看这里[htt...

  • 基于RBAC权限管理的后台管理系统

    在摸爬滚打中渐渐理解了RBAC权限管理是个什么玩意。 RBAC的基本概念: **RBAC认为权限授权实际上是Who...

  • RBAC基于角色的权限管理--设计篇1.0

    RBAC基于角色的权限管理--设计篇1.0 RBAC是什么 基于角色的权限管理。简单来说就是一个用户可以拥有若干个...

  • OpenZeppelin 源码学习笔记

    Ownership 权限及管理集合 RBAC - 基于角色的权限管理功能的 Role-Based Access C...

  • RBAC模型概述

    什么是RBAC 注意不是RABC,手抖容易打错。 RBAC(基于角色的权限控制)模型是为了解决系统中的权限管理问题...

  • rbac权限管理

    概述 RBAC : 基于角色的权限访问控制(Role-Based Access Control),通过角色绑定权限...

  • 权限管理(RBAC)

    在说权限管理前,应该先知道权限管理要有哪些功能: (1)、用户只能访问,指定的控制器,指定的方法 (2)、用户可以...

  • 权限管理RBAC

    找到这样一张图感觉很受启发,决定记录一下

网友评论

      本文标题:权限管理RBAC

      本文链接:https://www.haomeiwen.com/subject/pcyuvttx.html