权限管理系统,可以这么设计

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

theme: channing-cyan

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

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

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

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

必要性

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

复用

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

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

安全

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

统一

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

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

组成分析

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

系统

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

系统部分一般包含如下信息:系统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语言
相关文章
|
11天前
|
安全 Java 应用服务中间件
实现权限管理的技术
实现权限管理的技术
16 0
|
4月前
|
安全 Java 数据安全/隐私保护
构建高效网站后台:权限管理系统设计与实现
【7月更文挑战第5天】在现代Web应用开发中,权限管理是后台系统不可或缺的一部分,它确保了系统的安全性与用户数据的隐私。良好的权限管理系统能够精细控制不同用户角色对功能模块及数据资源的访问权限,从而提升系统的灵活性和安全性。本文将深入探讨权限管理的基本概念、设计思路,并通过一个简单的代码示例展示如何在Web后台中实现基本的权限控制逻辑。
281 2
|
5月前
|
存储 安全 数据库
管理端开发如何快速理解并实现权限控制总结
管理端开发如何快速理解并实现权限控制总结
|
6月前
|
安全 Java 数据库
设计一个简单的权限系统
在Java中构建简单权限系统涉及定义Role和Permission实体,创建User实体关联角色,设计权限分配机制,实现权限检查方法及界面交互。示例代码包括实体类、权限分配服务、安全服务和主函数。实际应用可能需要更复杂的权限控制、动态管理、数据库集成和用户界面。Spring Security等框架可提供全面的安全管理解决方案。【5月更文挑战第3天】
|
消息中间件 JSON 安全
如何设计权限系统?
如何设计权限系统?
|
安全 Java 数据库
1-企业权限管理系统
1-企业权限管理系统
1-企业权限管理系统
|
SQL Java 数据库
权限管理系统(四)
前面我们做的小项目都是一个表的,业务代码也相对简单。现在我们来做一个权限管理系统,体验一下多表的业务逻辑,顺便巩固一下过滤器的知识。!
511 2
权限管理系统(四)
|
前端开发 安全 JavaScript
系统权限设计 - 推荐方案
在上篇文章《系统权限设计 - 基本概念和思路》中,介绍了我们在做权限设计的时候需要注意的一些点。
459 0
|
PHP 数据库 数据安全/隐私保护
简单权限管理设计
这套权限管理是配合Zend Framework设计的,用在其他地方的时候可以做些修改。
简单权限管理设计