权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。对权限做管理的系统,就是权限管理系统。

我自己没有开发过公用的权限管理系统,不过给后台写过简单的权限管理功能,用过两套相对专业的权限管理系统。这两天开发一个新后台,需要用到权限管理,发现公司已有一个权限管理系统,可直接对接。

这套权限管理系统,对接顺畅、授权操作成本低、能满足大部分需求。所以主要以这个系统例进行讲解。

因为没有看过系统代码,所以代码相关的内容会比较少,主要聊一些基本操作。

必要性

权限管理系统是很必要的。主要有以下几个原因

复用

公司往往有大量后台,后台都需要进行权限管理。而权限管理的核心流程是相似的,如果每个后台单独开发一套权限管理系统,就是重复造轮子,是人力的极大浪费。

有一套公用的权限管理系统,只需做好对接工作,能节省大量人力。

安全

每个人开发能力不一样,很难保证各自开发的权限管理系统是足够严谨的。

统一

首先是宏观上的统一,所有后台系统对接同一套权限管理系统,统一了技术栈。

其次便于统一管理,无论是维护、管理、查看,都只需关注一个系统,达到收敛效果。

组成分析

权限管理系统有几大组成部分,分别为系统、业务、菜单、权限、角色。

系统

权限管理系统需与众多平台对接,必须能够标记不同平台。

系统部分一般包含如下信息:系统ID、系统名称、系统描述、系统负责人、创建时间、修改时间

业务

系统内可能有不同业务,也可能只有一个业务。

如商家后台,不同的商家可以认为是不同的业务。因为同一个使用者可能操作多个商家,但所处角色不同。

如一些海外系统,需要管理多个国家,不同的国家可以认为是不同的业务。因为同一个用户可能以不同角色管理多个国家配置;或者只能管理一个国家的配置。

当系统只有一个业务的情况下,业务可只有一个。

角色

操作者的身份,不同身份权限不同,看到的菜单内容也不同。常见的角色有:运营、开发者、admin等。

菜单

菜单为树形结构,包含多个一级菜单,一个一级菜单包含多个二级菜单或页面,二级菜单包含多个页面。

菜单信息一般包含

权限

前端菜单/页面都需要调用后端接口,所以可以将菜单和调用的接口进行绑定,这就形成了一种关联,拥有某个菜单,便拥有了请求相关接口的权限。

权限管理里只显示一二级目录,没有显示页面,主要原因是不想重复配置。

有一种特殊情况,不同角色可以操作同一个页面的同一个接口,但是操作内容不同,如对更新商品而言,商家只能编辑,运营则负责审核。如果两个操作同一个接口的话,就需要在服务端自行做权限校验。另一种方案是将接口进行拆分,但服务端仍然需要做一部分检查。

关系

权限管理系统的核心是管理角色的权限。即角色、菜单、权限之间的关系。上面讲了各个组成后,这之间的关系就比较简单了

角色配置的时候和菜单进行绑定,菜单又是和接口绑定的,所以实现了角色-菜单-接口权限之间的对应关系。

前提

使用权限管理系统需要有两个前提

  1. 需要有账号体系。

    拥有账号体系意味着能够获取用户id,此时权限管理系统才能被使用。

  2. 需要有申请流程

很多公司做权限管理系统的时候,并没有申请流程。添加新用户需管理员在后台人工添加,不但需要录入大量信息,而且容易出错,大大增加了管理员的成本。

合理的方式为,用户申请权限,系统自动录入数据,管理员审核

接口

权限管理系统需要提供接口供平台调用,其中需要有:

  1. 角色列表:用于用户申请时,能够看到有哪些角色可供选择

  2. 分配角色:用户登录后能够获取到用户id,可以给该用户分配指定系统、指定业务、指定角色

  3. 菜单:获取该角色对应的菜单内容

  4. 接口权限验证:判断该角色是否能够访问指定接口

权限管理系统往往用于后台,虽流量不高,但也需要关注性能问题,尤其像接口权限验证,几乎每次都需要请求,此时就需要使用缓存来提高性能。

总结

按照该设计搭建的权限管理系统可以满足大部分业务需求。权限和菜单进行绑定,角色和菜单进行绑定,这种设计更直观、易理解,但也需要后台在设计时,思考好权限与角色的关系,这对后台开发者提出了一定的要求。

最后

大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)

我的个人博客为:https://shidawuhen.github.io/

往期文章回顾:

  1. 设计模式

  2. 招聘

  3. 思考

  4. 存储

  5. 算法系列

  6. 读书笔记

  7. 小工具

  8. 架构

  9. 网络

  10. Go语言

权限管理系统,可以这么设计相关推荐

  1. 权限管理系统数据库设计的简单构思

    最近在工作中接触到权限管理的设计,于是,自己在网上查阅了部分资料,再加上自己的一些思考,构思了一个简单的权限管理系统的数据库设计. RBAC与Tag 说到权限管理,一般都会想到基于角色的访问控制(Ro ...

  2. 使用 Shiro 设计基于用户、角色、权限的通用权限管理系统

    一.前言 在大型的信息管理系统中,经常涉及到权限管理系统 下面来个 demo,很多复杂的系统的设计都来自它 代码已经放到github上了,地址:https://github.com/larger5/s ...

  3. 基于RBAC模型的通用权限管理系统的设计(数据模型)的扩展

    1 RBAC模型        访问控制是针对越权使用资源的防御措施.基本目标是为了限制访问主体(用户.进程.服务等)对访问客体(文件.系统等)的访问权限,从而使计算机系统在合法范围内使用:决定用户能 ...

  4. 基于Flask实现后台权限管理系统 - 表设计

    1.1. 设计 1.1.1. 用户表 用户表记录系统中的所有用户,是权限管理系统最基本的部分,和其他权限表都有一定的关联关系,同时,一个还有一个重要的功能:系统登陆. 名称 数据类型 允许空值 默认值 ...

  5. C# ASP.NET 权限设计 完全支持多数据库多语言包的通用权限管理系统组件源码

    最近支付权限客户1000元辛苦费,把走火入魔通用权限管理系统中里的英文语言包进行了彻底完善,大概耗费了2周工作时间,经过一轮测试修正后就可以正式交付使用了.好在原先通用权限管理系统设计时就按支持多语言 ...

  6. 架构师之路 — API 经济 — 权限管理系统(分权分域设计)

    目录 文章目录 目录 权限管理系统 权限的抽象 分权分域 权限访问控制模型 UGO(User.Group.Other) ACL(访问控制列表) DAC(自主访问控制) MAC(强制访问控制) RBAC ...

  7. spring和mybatis结合做简单的增删查改系统_如何从零开始设计权限管理系统

    背景说明houbb/privilege背景说明 近期写代码又开始重新接触了一点控台应用,接触到的项目年代久远,所有的权限管理用起来感觉不是很得心应手. 于是想着自己能否从零设计一个,梳理一下思路,当然 ...

  8. 毕业设计-课程设计-Spring+SpringMVC+Mybatis项目—企业权限管理系统(1)

    JavaEE:Spring+SpringMVC+Mybatis项目-企业权限管理系统 首先给出项目演示地址:http://www.youngxy.top:8080/SSM/ 项目架构图: 一:功能需求 ...

  9. php写网页6,基于ThinkPHP6+AdminLTE框架开发的响应式企业网站CMS系统PHP源码,ThinkPHP6开发的后台权限管理系统...

    源码介绍 基于最新ThinkPHP6+AdminLTE框架开发的响应式企业网站CMS系统PHP源码,基于最新版本的ThinkPHP 6.0.0RC3框架,后台前端框架采用AdminLTE.系统的核心理 ...

  10. 统一用户及权限管理系统

    欢迎来到 MSDN > 白皮书与解决方案建议 > 经典案例研究 统一用户及权限管理系统 发布日期: 2004-09-08 解决方案概述 用户档案 行业: 政府 业务对象:徐汇区政府 商业背 ...

最新文章

  1. 处理器体系结构(了解CPU的基本运行原理)——《深入理解计算机系统》
  2. 【机器学习PAI实践八】用机器学习算法评估学生考试成绩
  3. [python]函数默认参数顺序问题
  4. IMX8QXP内部M4移植rt-thread
  5. 论文落地 101:算法工程化的那些坑
  6. Python xlrd 读取xls文件
  7. 【Java】日期/事件字符串包含TZ
  8. mysql练习数据_数据分析学习第一关-入门
  9. PHP学习总结(12)——PHP入门篇之变量
  10. lintcode:线段树的构造
  11. opencv 凸包讲解和绘制
  12. 八款你不得不知的开源前端JS框架
  13. 欢迎使用CSDN-markdown编辑器231
  14. WinSnap 截图工具绿色中文特别版
  15. MySQL 数据归档清理方法
  16. spssfisher判别分析步骤_spss进行判别分析步骤_spss判别分析结果解释_spss判别分析案例详解...
  17. Photoshop文字之——制作晶莹剔透胶体特效
  18. linux TC命令使用总结
  19. numpy.triu、numpy.triu_indices、np.triu_indices_from函数使用
  20. 软件测试面试题【含答案】

热门文章

  1. 设置无线网卡为AP工作模式(pi2和pi3)
  2. 如何使用XShell将本机文件上传到虚拟机上?
  3. coreldraw怎样定数等分_cdr怎样将一个圆形平均划分为三等分?
  4. Java责任链模式及异步责任链
  5. css3实现奔跑的小人动画
  6. SPSS神经网络心得(二)
  7. STM32CubeMx + HighSpeed USB + FreeRTOS
  8. mysql卸载安装pxc_PXC安装
  9. RGB颜色对照表以及十六进制
  10. AtCoder - ABC 160 - DE(贪心)