【项目实践】后台管理系统前后端实践一:权限控制原理

权限模型

先回顾总结下之前做权限设计的经验。权限设计的核心在于怎么合理的给每个人分配权限,其中的核心我理解有三个:用户,资源,策略。用户的主体是人,资源可以是页面/按钮/api等,策略是指定用户应该按照何种规访问哪些资源。权限模型总的来说可以分为5类:

  • ACL:Access Control List,访问控制列表。简单理解为将资源的访问权限记录下,资源能否访问先查表,window的文件系统就是这种模式的应用。
  • DAC:Discretionary Access Control,自主访问控制(ACL的拓展)。简单理解为在 ACL 基础上,拥有权限的用户自主的给其他人赋予资源的访问权限。
  • MAC: Mandatory Access Control,强制访问控制。简单理解为用户和资源都设置了权限限制,用户访问资源需要验证用户身份和资源的访问级别。
  • RBAC:Role-Based Access Control,基于角色的权限访问控制。简单理解为给用户赋予特定的角色,角色上赋予资源的访问权限。RBAC目前是主流的权限控制模型,细分为RBAC0,RBAC1,RBAC2,RBAC3。
  • ABAC:Attribute-Based Access Control,基于属性的访问控制。简单理解为通过策略(访问规则的描述)来限定资源的访问,策略可以用在用户上,也可以用在资源上。
// 阿里云 RAM 策略配置表
{"Version": "1","Statement":[{"Effect": "Allow","Action": ["oss:List*", "oss:Get*"], // 请求的描述"Resource": ["acs:oss:*:*:samplebucket", "acs:oss:*:*:samplebucket/*"], // 资源的描述"Condition": // 约束条件的描述 {"IpAddress": {"acs:SourceIp": "42.160.1.0"}}}]
} 

RBAC 权限模型

RBAC 作为主流的权限控制模型有3个基础组成部分,分别是:用户、角色和权限:

  • 用户:可以是单个用户,也可以是用户组
  • 角色:可以定义为单个角色,也可以将同类型的角色做成角色集,上下级的角色定义为岗位
  • 权限:可以分为两大类:功能权限和数据权限。功能权限是指菜单(页面),按钮(api)等这类权限。数据权限是指对数据访问范围的区分,如根据国家区分数据的访问范围。

RBAC 模型分类

RBAC0:最基础 RBAC 模型,。在这个模型中,我们把权限赋予角色,再把角色赋予用户。用户和角色,角色和权限都是多对多的关系。用户拥有的权限等于他所有的角色持有权限之和。

RBAC1:RBAC1建立在RBAC0基础之上,在角色中引入了继承的概念。简单理解就是,给角色可以分成几个等级,每个等级权限不同,从而实现更细粒度的权限管理。角色集和岗位就是RBAC1的应用。

RBAC2:RBAC2同样建立在RBAC0基础之上,对用户、角色和权限三者之间增加了一些限制。这些限制可以分成两类,即静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。

RBAC3:RBAC3 = RBAC1 + RBAC2,所以RBAC3既有角色分层,也包括可以增加各种限制。

前端功能权限实现

对于前端来说,权限控制体现在页面和按钮是否显示。结合 vue-element-admin 看看页面的显示控制是怎么完成的。 在 vue-element-admin 中,页面的显示控制是获取到角色后,找到 route.meta.roles 符合的角色生成 asyncRoutes 通过 router.addRoutes 动态生成 routes。侧边栏 SideBar 组件遍历路由生成该角色的菜单栏导航。 具体实现过程描述如下:

1.创建vue实例的时候将vue-router挂载,但这个时候vue-router挂载一些登录或者不用权限的公用的页面。
2.当用户登录后,获取用户role,将role和路由表每个页面的需要的权限作比较,生成最终用户可访问的路由表。
3.调用router.addRoutes(store.getters.addRouters)添加用户可访问的路由。
4.使用vuex管理路由表,根据vuex中可访问的路由渲染侧边栏组件。

页面功能权限

页面权限功能的总体逻辑在beforeEach,代码如下:

router.beforeEach(async(to, from, next) => {// start progress barNPro
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Novel是基于SpringBoot的前后端分离权限管理系统,易读易懂、界面简洁美观。 采用SpringBoot+Vue前后端分离模式开发,后端主要采用SpringBoot+mysql+mybatis+druid+shiro+redis,前端主要采用vue+TypeScript+Sass+element-ui+vuex+axios。 它可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 Novel内置功能: 1、用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2、部门管理:配置系统组织机构(公司、部门、小组),树结构展现。 3、岗位管理:配置系统用户所属担任职务。 4、菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5、角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6、操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 7、登录日志:系统登录日志记录查询包含登录异常。 8、服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 9、在线用户:当前系统中活跃用户状态监控。 10、连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 11、定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 12、代码生成:前后端代码的生成支持CRUD下载。 13、参数管理:对系统动态配置常用参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值