多租户通用权限设计(基于casbin)
多租户通用权限设计(基于 casbin)
所谓权限控制, 概念并不复杂, 就是确认某个操作是否能做, 本质上仅仅就是个bool判断.
权限几乎是每个系统必不可少的功能, 和具体业务结合之后, 在系统中往往表现的非常复杂和难于控制, 很大部分原因是把权限和具体业务结合的太过紧密, 把业务的复杂度也加入到权限控制中来了.
一直以来, 都有个想法, 想做一套简单好用的通用权限系统, 和任何业务都没有关系, 仅仅就是权限本身的功能.
对此, 做过很多尝试, 由于设计能力有限, 最后都不了了之, 没能坚持做出来.
直到看到了 casbin, 这个库正是一直以来想要做的, 功能强大(几乎涵盖了所有的权限场景), 使用简单, 将权限彻底的独立了出来.
所以, 基于此库, 做了一套简单的权限系统API, 以及一个简单的前端.
1. 对 casbin 的理解
我对 casbin 的理解是这样的, 我觉得它之所有如此简洁且功能强大, 是因为它将权限分为了2块:
- 对权限策略的管理
- 对权限的判断
1.1 权限策略
在我看来, casbin 的核心策略主要有2种:
- 组: 对人员的管理, 一条组策略包括
用户,角色,租户 - 权限: 权限控制的依据, 一条权限策略包括
用户/角色,租户,资源,操作
通过对权限策略的定义, 可以控制系统中任何资源的访问.
组策略的定义可以简化权限策略的定义, 否则每个用户都要定义大量权限策略
1.2 权限判断
权限判断看似复杂, 其实就是确认能或不能的问题, 只要策略描述清楚的了权限, 这里的判断也很简单.
所以 casbin 的权限判断很简单, 一般只用配置文件定义下就可以了.
说白了, 它就是定义依据组策略和权限策略, 在什么情况下是PASS, 什么情况是NG
2. API介绍
我尝试基于casbin所做的权限系统, 并不是要做个大而全的, 而是针对自己的项目, 做了个基于RBAC的多租户权限系统.
API主要分3类:
- 管理: 用于创建
组策略和权限策略 - 预览: 基于
用户, 或者基于角色, 或者基于租户来表达权限关系 - 权限控制: 判断
用户或者角色是否有权限
后端是基于 golang 来封装的: GIT地址(dev分支)
API的相关代码在: src/labrador/controllers/tenant_rbac_api
3. 前端介绍
前端是简单的react+redux应用, 主要使用了 管理和预览 的API: GIT地址(dev分支)
用了 G6 这个库来表达权限之间的关系.
4. 总结
虽然只是尝试了casbin的一部分功能, 但是依然感受了它的简洁和强大.
它对权限的独立做了非常好的定义, 而且以库的形式提供, 也方便集成到各种业务系统中, 是个非常值得采用的通用权限库.
多租户通用权限设计(基于casbin)的更多相关文章
- 一个基于RBAC0的通用权限设计清单
注:RBAC0与RBAC1不同在于权限继承.关于RBAC1的权限设计,敬请关注作者后续CSDN博客.1,用户表 保存系统用户信息,如张三.李四,字段可以有id.name.fullname.email. ...
- 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路
前言:“我们有一个订单列表,希望能够根据当前登陆的不同用户看到不同类型的订单数据”.“我们希望不同的用户能看到不同时间段的扫描报表数据”.“我们系统需要不同用户查看不同的生产报表列”.诸如此类,最近经 ...
- 一个基于RBAC的通用权限设计清单
RBAC即角色访问控制(Role Based Access Control) RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构成了访问权限三元组 ...
- 基于RBAC设计的通用权限管理框架
RoadFlow拥有基于RBAC设计的通用权限管理框架.不仅可以基于角色组进行菜单授权,还可以根据组织架构中部门.岗位.人员等进行细分的权限管理分配. 如果一个人有重复菜单权限,则将自动合并. 系统资 ...
- 使用 Shiro 设计基于用户、角色、权限的通用权限管理系统
一.前言 在大型的信息管理系统中,经常涉及到权限管理系统 下面来个 demo,很多复杂的系统的设计都来自它 代码已经放到github上了,地址:https://github.com/larger5/s ...
- 基于SSM框架的通用权限框架设计
1. 整体解决方案概述 1.1 权限整体解决方案概述 权限设计主要有一下几大部分组成: PassPort: 针对现在系统的分析,系统之间有部分信息是共享的,这部分信息将由 ...
- 基于casbin的RBAC权限实践
五一假期疫情封在家也没事做,就想来优化一下一个前端容器小项目 之前的TODOlist里面有一项是权限这块时隔2年了还一直没有动手 迟迟没搞主要还是我太懒了,哈哈 其实我一直想要找一个轻量级的权限通用方 ...
- 基于SSM框架的JavaWeb通用权限管理系统
- - ->关注博主公众号[C you again],获取更多IT资源(IT技术文章,毕业设计.课程设计系统源码,经典游戏源码,HTML网页模板,PPT.简历模板,!!还可以投稿赚钱!!,点击查 ...
- Net 通用权限管理系统源码 带数据库设计文档,部署说明文档
Net 通用权限管理系统源码 带数据库设计文档,部署说明文档 包括数据库设计文档部署安装文档源码数据库文件 下载地址:http://www.mallhd.com/archives/1389
随机推荐
- DataPipeline联合Confluent Kafka Meetup上海站
Confluent作为国际数据“流”处理技术领先者,提供实时数据处理解决方案,在市场上拥有大量企业客户,帮助企业轻松访问各类数据.DataPipeline作为国内首家原生支持Kafka解决方案的“iP ...
- Windows 安装 Scoop
Scoop介绍 scoop是Windows下的包管理工具 安装环境要求 1,操作环境:win10 2,确保你的 PowerShell 版本 >= 3. win7或许低于3,得升级.如何确认Pow ...
- SpringBoot2.0之八 多数据源配置
在开发的过程中我们可能都会遇到对接公司其他系统等需求,对于外部的系统可以采用接口对接的方式,对于一个公司开发的两个系统,并且知道相关数据库结构的情况下,就可以考虑使用多数据源来解决这个问题.Spri ...
- C 实现自己构建的数组
#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<stdbool.h>stru ...
- kubernetes 客户端KubeClient使用及常用api
KubeClient是kubernetes 的C#语言客户端简单易用,KubeClient是.NET Core(目标netstandard1.4)的可扩展Kubernetes API客户端, gith ...
- 微信小程序中转义字符的处理
在微信小程序开发过程中,有时候会用到常用的一些特殊字符如:‘<’.‘>’.‘&’.‘空格’等,微信小程序同样支持对转义字符的处理,下面提供两种方法用来处理微信小程序中转义字符的处理 ...
- ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...
- HttpUtil 【判断网络连接的封装类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 该封装类主要包括以下功能: 判断是否有网络连接.判断是否有可用的网络连接: 判断是否是3G网络.判断mobile网络是否可用: 判断 ...
- java~springboot~gradle里的docker集成
在springboot里,我们的task任务可以添加docker构建的功能,在gradle集成环境里,直接可以实现编译,测试,打包镜像的流水线作业,很是方便! 下面分享给大家,在gradle里添加do ...
- 初步认识Swiper_前端交互控制神器_滚动3D切换等特效简单制作
前言: 本人在项目的工作中负责研发,页面及交互基本都是交给前端去做的.以前前端写的东西大概都知道,都是一些JS,CSS和HTML等的一些基本控制,都懂!但是今天前端突然做了一个具有特殊效果的DOM:页 ...