多租户通用权限设计(基于 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的一部分功能, 但是依然感受了它的简洁和强大.
它对权限的独立做了非常好的定义, 而且以库的形式提供, 也方便集成到各种业务系统中, 是个非常值得采用的通用权限库.

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

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

    注:RBAC0与RBAC1不同在于权限继承.关于RBAC1的权限设计,敬请关注作者后续CSDN博客.1,用户表 保存系统用户信息,如张三.李四,字段可以有id.name.fullname.email. ...

  2. 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路

    前言:“我们有一个订单列表,希望能够根据当前登陆的不同用户看到不同类型的订单数据”.“我们希望不同的用户能看到不同时间段的扫描报表数据”.“我们系统需要不同用户查看不同的生产报表列”.诸如此类,最近经 ...

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

    RBAC即角色访问控制(Role Based Access Control) RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构成了访问权限三元组 ...

  4. 基于RBAC设计的通用权限管理框架

    RoadFlow拥有基于RBAC设计的通用权限管理框架.不仅可以基于角色组进行菜单授权,还可以根据组织架构中部门.岗位.人员等进行细分的权限管理分配. 如果一个人有重复菜单权限,则将自动合并. 系统资 ...

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

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

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

     1. 整体解决方案概述    1.1 权限整体解决方案概述     权限设计主要有一下几大部分组成:     PassPort:    针对现在系统的分析,系统之间有部分信息是共享的,这部分信息将由 ...

  7. 基于casbin的RBAC权限实践

    五一假期疫情封在家也没事做,就想来优化一下一个前端容器小项目 之前的TODOlist里面有一项是权限这块时隔2年了还一直没有动手 迟迟没搞主要还是我太懒了,哈哈 其实我一直想要找一个轻量级的权限通用方 ...

  8. 基于SSM框架的JavaWeb通用权限管理系统

    - - ->关注博主公众号[C you again],获取更多IT资源(IT技术文章,毕业设计.课程设计系统源码,经典游戏源码,HTML网页模板,PPT.简历模板,!!还可以投稿赚钱!!,点击查 ...

  9. Net 通用权限管理系统源码 带数据库设计文档,部署说明文档

    Net 通用权限管理系统源码 带数据库设计文档,部署说明文档 包括数据库设计文档部署安装文档源码数据库文件 下载地址:http://www.mallhd.com/archives/1389

随机推荐

  1. svn 迁移至git操作手册

    svn 迁移至git操作手册 项目交付.版本管理工具变更等情况下,迁移svn旧历史记录有很大必要,方便后续追踪文件的提交历史,文件修改记录比对等.git自带了从svn迁移至git的工具命令,可很好的对 ...

  2. java8 日期时间之间的关系

     Class or Enum Year Month Day Hours Minutes Seconds* Zone Offset Zone ID toString Output Where Discu ...

  3. mac-os安装autojump

    一 概念 autojump是一个命令行工具,它可以使用快捷命令,直接跳转到配置好的目录,而不用管现在身在何处,依赖zsh. 一 安装 安装zsh:sh -c "$(curl -fsSL ht ...

  4. centos安装rabbitmq

    RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发.RabbitMQ据说具有良 ...

  5. java~gradle构建公用包并上传到仓库~使用私有仓库的包

    在新的项目里使用仓库的包 上一讲中我们说了java~gradle构建公用包并上传到仓库,如何发布公用的非自启动类的包到私有仓库,而这一讲我们将学习如何使用这些包,就像我们使用spring框架里的功能包 ...

  6. 多元线性回归公式推导及R语言实现

    多元线性回归 多元线性回归模型 实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示. 为了方便计算,我们将上式写成矩阵形式: Y = XW 假设自变量维度为N W ...

  7. Python实现Singleton模式的几种方式

    使用python实现设计模式中的单例模式.单例模式是一种比较常用的设计模式,其实现和使用场景判定都是相对容易的.本文将简要介绍一下python中实现单例模式的几种常见方式和原理.一方面可以加深对pyt ...

  8. MySQL 笔记整理(12) --为什么我的MySQL会“抖”一下?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 12) --为什么我的MySQL会“抖”一下? 断更了一段时间,因为这几 ...

  9. C# 以函数Action/Func/Task作为方法参数

    以Action.Func.Task作为方法参数,mark一下 以Action为参数 public void TestAction() { //Action参数 ExecuteFunction(() = ...

  10. C# T4 模板 数据库实体类生成模板(带注释,娱乐用)

     说明:..,有些工具生成实体类没注释,不能和SqlServer的MS_Description属性一起使用,然后照着网上的资源,随便写了个生成模板,自娱自乐向,其实卵用都没有参考教程    1.htt ...