多租户通用权限设计(基于casbin)

多租户通用权限设计(基于 casbin)

所谓权限控制, 概念并不复杂, 就是确认某个操作是否能做, 本质上仅仅就是个bool判断.

权限几乎是每个系统必不可少的功能, 和具体业务结合之后, 在系统中往往表现的非常复杂和难于控制, 很大部分原因是把权限和具体业务结合的太过紧密, 把业务的复杂度也加入到权限控制中来了.

一直以来, 都有个想法, 想做一套简单好用的通用权限系统, 和任何业务都没有关系, 仅仅就是权限本身的功能.
对此, 做过很多尝试, 由于设计能力有限, 最后都不了了之, 没能坚持做出来.

直到看到了 casbin, 这个库正是一直以来想要做的, 功能强大(几乎涵盖了所有的权限场景), 使用简单, 将权限彻底的独立了出来.

所以, 基于此库, 做了一套简单的权限系统API, 以及一个简单的前端.

1. 对 casbin 的理解

我对 casbin 的理解是这样的, 我觉得它之所有如此简洁且功能强大, 是因为它将权限分为了2块:

  • 对权限策略的管理
  • 对权限的判断

1.1 权限策略

在我看来, casbin 的核心策略主要有2种:

  1. 组: 对人员的管理, 一条组策略包括 用户, 角色, 租户
  2. 权限: 权限控制的依据, 一条权限策略包括 用户/角色, 租户, 资源, 操作

通过对权限策略的定义, 可以控制系统中任何资源的访问.

组策略的定义可以简化权限策略的定义, 否则每个用户都要定义大量权限策略

1.2 权限判断

权限判断看似复杂, 其实就是确认能或不能的问题, 只要策略描述清楚的了权限, 这里的判断也很简单.

所以 casbin 的权限判断很简单, 一般只用配置文件定义下就可以了.
说白了, 它就是定义依据组策略权限策略, 在什么情况下是PASS, 什么情况是NG

2. API介绍

我尝试基于casbin所做的权限系统, 并不是要做个大而全的, 而是针对自己的项目, 做了个基于RBAC的多租户权限系统.

API主要分3类:

  1. 管理: 用于创建组策略权限策略
  2. 预览: 基于用户, 或者基于角色, 或者基于租户来表达权限关系
  3. 权限控制: 判断用户或者角色是否有权限

后端是基于 golang 来封装的: GIT地址(dev分支)

API的相关代码在: src/labrador/controllers/tenant_rbac_api

3. 前端介绍

前端是简单的react+redux应用, 主要使用了 管理预览 的API: GIT地址(dev分支)

用了 G6 这个库来表达权限之间的关系.

4. 总结

虽然只是尝试了casbin的一部分功能, 但是依然感受了它的简洁和强大.
它对权限的独立做了非常好的定义, 而且以库的形式提供, 也方便集成到各种业务系统中, 是个非常值得采用的通用权限库.

原文地址:https://www.cnblogs.com/wang_yb/p/10407683.html

时间: 2024-08-25 21:22:59

多租户通用权限设计(基于casbin)的相关文章

通用权限设计

1.  可以跟角色给用户权限,用户权限字段存的数据格式为:ID_菜单英文名称; ID_菜单英文名称;……; ID_功能英文名称;……. 2.  用户登录时,权限存在session里: 3.  初始化菜单,判断用户权限是否存在该菜单,如果存在就出现,不存在就隐藏. 4.  页面功能java在拦截器了判断权限,PHP在同一入口了拦截,.net就在页面的基类里判断或者在Page_Init里设置控件隐藏或显示. 通用权限设计

通用权限设计(springmvc + mybatis + ligerui)

最近一直在思考,如何设计一个毕业论文呢?后台就回想起自己以前大学做的项目,每次都需要开发一个后台网站,及其繁琐,后来就慢慢有了个想法,开发一个网站固件,可以动态配置,于是就动手设计了起来... 通用权限设计 每一个网站,都有着相似的后台界面,现在比较流行的DWZ.LIGERUI.EXTJS等js框架,都提供了相似的界面.同时,后台网站的安全也是非常重要的.那么,为了开发上的方便,很有必要将一个后台网站做成一个通用的网站固件.这样子带来的好处:可以动态配置后台网站,极大简便了重复造轮子的功夫. 主

一个基于RBAC0的通用权限设计清单

注:RBAC0与RBAC1不同在于权限继承.关于RBAC1的权限设计,敬请关注作者后续CSDN博客.1,用户表 保存系统用户信息,如张三.李四,字段可以有id.name.fullname.email.phone.……2,角色表 保存角色信息,如学生.管理员,字段有id.name.……3,权限表 保存系统的权限信息,可定义系统哪些模块公开,或者什么时段可访问,字段有id,权限名4,用户角色表 关联用户和角色的关系表,如张三-学生,李四-管理员,字段有id.用户id.角色id,根据用户就知道所属的角

.net通用权限设计源码

经过一年多的设计编码和测试,公司通用权限系统对业务部门提供了比较稳定.便捷和灵活的支撑. 该系统分为两部分:配置界面和WCF服务. 界面:权限系统管理员可以通过配置界面的方式对各部门或者组织机构的人员进行业务权限分配操作. WCF服务:业务开发人员可以通过权限系统提供的接口服务,获取业务权限数据,对业务系统进行开发. 该设计的好处就是权限系统的可移植性更高,权限系统可以单独部署,发布对外的服务接口即可,和业务系统之间耦合性更低,从而达到设计模式的核心价值高内聚,低耦合. IIS部署示例如下: 权

大话设计,没有模式—通用权限设计与实现

当代码写多了,总有些是经验,但经验是什么呢?if-else用的次数比别人多?显然不是.有些超棒的设计可以谓之经验! 功能权限网络上流行的经典的权限设计是[主体]- [领域] - [权限]( who.what.how问题原型 ) 的设计思想,其中: [主体]可以是用户,可以是角色,也可以是一个部门 [领域]可以是一个模块,可以是一个页面,也可以是页面上的按钮 [权限]可以是"可见",可以是"只读",也可以是"可用"(如按钮可以点击) 为了简化程序开

一个基于RBAC的通用权限设计清单

RBAC即角色访问控制(Role Based Access Control) RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构成了访问权限三元组,也就是"Who对What(Which)进行How的操作".Who:权限的拥用者或主体(如Principal.User.Group.Role.Actor等等)What:权限针对的对象或资源(Resource.Class).How:具体的权限(Privilege,正向授权与负向授权). 基于

通用权限管理设计

权限设计(初稿)     1. 前言:     权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案.     2. 目标:     直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用一个权限系统

基于SSM框架的通用权限框架设计

?1. 整体解决方案概述 ? ?1.1?权限整体解决方案概述 ? ? 权限设计主要有一下几大部分组成:? ? ?PassPort:? ? 针对现在系统的分析,系统之间有部分信息是共享的,这部分信息将由中心话的Passport来统一维护 用于中心存放用户,组织架构,渠道,品牌和产品相关的信息. 有关员工信息,可以从现有HR系统或者MDM中取得. 有关外部人员活动目录,可以专门在本PassPort系统中维护. ? ?权限订阅模块:? ?负责订阅接受Passport发出的相关实体修改的信息.? ?资源

基于MVC4+EF5+EasyUI技术实现通用权限管理系统(EpPlus、HignCharts、Reportviewer报表)视频教程

基于MVC4+EF5+EasyUI技术实现通用权限管理系统(EpPlus.HignCharts.Reportviewer报表)视频教程 联系QQ:1026270010 1.项目研发环境 项目源代码会提供以MVC4+EF5和MVC5+EF6为基准的两套版本,数据库会提供以Sqlserver2005为基准的数据库脚本,以下环境都适用于项目. 开发工具:VS2012,VS2013; 数据库工具:SqlServer2005,2008,2012,2014    其他工具:Easyui,Jquery,EpP