基于RBAC模型的权限设计:如何设计系统权限体系? | 人人都是产品经理
RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念。取消了用户和权限的直接关联,改为通过用户关联角色、角色关联权限的方法来间接地赋予用户权限(如下图),从而达到用户和权限解耦的目的。
在不断的发展过程中,RBAC也因不同的需求而演化出了不同的版本,目前主要有以下几个版本:
1.RBAC0,这是RBAC的初始形态,也是最原始、最简单的RBAC版本;
2.RBAC1,基于RBAC0的优化,增加了角色的分层(即: 子角色),子角色可以继承父角色的所有权限;
3.RBAC2,基于RBAC0的另一种优化,增加了对角色的一些限制: 角色互斥、角色容量等;
4.RBAC3,最复杂也是最全面的RBAC模型,它在RBAC0的基础上,将RBAC1和RBAC2中的优化部分进行了整合;
RBAC1:
RBAC2:
?
RBAC3:?
一套后台管理系统中基础与核心的板块主要包括: RBAC权限管理模块
RBAC (Role-Based Access Control) : 基于角色的访问控制
系统中包含了用户、角色、权限三个部分,是不是能够不要有“角色”环节? 是可以的,但是不合适
首先需要有一个用户的概念,用户对应的是角色:
角色能够做的事情是什么? 角色想对什么东西进行控制? 控制的是什么内容?(角色主要想控制“资源”)
在对角色进行权限分配的时候,出现了一个tree组件,也就是树形菜单,而这个树形菜单中的内容是什么呢?
1. 资源的内容其实主要包括: 菜单(不同的用户看到的菜单就是不一样的) 、按钮(不同的用户在同一个页面中拥有的按钮操作权限也是不一样的)、数据(当前项目没有做)
2. 资源对应于当前项目中,其实就是对应于已经开发的功能版块(菜单)和版块中对应的操作按钮
3. 资源: 已经开发的资源(权限管理、商品管理) 和未开发的资源(订单、客户、优惠券、学生...)
权限管理主要划分成:
如果进行登录操作,涉及的是用户、角色、权限三者当中的哪部分工作?
当进行用户登录操作的时候,后端往往会返回前端什么样的数据内容?因为后端需要明确的是该用户拥有什么样的角色,能够进行哪些的权限操作。
路由菜单权限的基础操作
按钮权限的基础操作
src/router/routes.ts是什么文件? 显然它是前端项目路由的配置文件。之前一直强调实现的是静态路由表的配置操作。
路由的分类划分成了:静态路由、动态路由、任意路由
// 静态路由(默认路由)
export const staticRoutes: Array<RouteRecordRaw> = [
{
path: "/login",
name: "Login",
component: () => import('@/views/login/index.vue'),
meta:{
hidden: true,
}
},
.
.
.
];
// 定义动态路由(异步路由)
export const allAsyncRoutes: Array<RouteRecordRaw> = [
// 产品模块
{
path: "/product",
name: "Product",
component: () => import('@/layout/index.vue'),
meta:{
title: "商品管理",
icon: "ele-ShoppingBag"
},
children:[]
},
// 新闻模块
// 订单模块
// 促销模块
// 物流模块
.
.
.
];
// 任意路由
export const anyRoute=
/*匹配任意的路由必须最后注册*/
{
path:"/:pathMatch(.*)",
name:"Any",
redirect:"/404",
meta: {
hidden: true,
},
}
问题: 最终项目里的routes路由请问有几个? 只有1个!!!
最终staticRoutes、allAsyncRoutes、anyRoute需要进行一次整合、拼接,最终合成一个路由数组对象。最后发现staticRoutes、anyRoute都是不变化的,而allAsyncRoutes是可能会随着系统功能的扩展,从而产生变化,所以后续主要操作的就是allAsyncRoutes。?
?