所谓权限控制, 概念并不复杂, 就是确认某个操作是否能做, 本质上仅仅就是个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的一部分功能, 但是依然感受了它的简洁和强大.
它对权限的独立做了非常好的定义, 而且以库的形式提供, 也方便集成到各种业务系统中, 是个非常值得采用的通用权限库.  .net core 版本的 casbin ,即 Casbin.NET:https://github.com/casbin/casbin.net

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


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

多租户通用权限设计(基于 casbin)相关推荐

  1. .NET 通用权限设计

    .NET 通用权限设计 转载于:https://www.cnblogs.com/macT/p/10213931.html

  2. 2009-09-23 18:04 by 不仅仅是通用权限设计, 3508 visits, 网摘, 收藏, 编辑

    序言]    今天中午吃了陕西版烤羊排.炒面皮.冰可乐.真爽啊,羊排肉嫩多汁而且上面的调味弄得也非常好吃,现在同事们都下班去吃饭了,我还一点儿不饿,好几天没写文章了,今天接着写写娱乐娱乐大家,趁着心情 ...

  3. 疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 操作权限...

    我的目标就是,权限想定义什么权限就定义什么权限,想搞几个权限就搞几个 权限,只要一行代码就可以在程序里准确判断,用最少的参数,用最最简单的 方法,通用程序判断程序运行得铜墙铁壁一样稳定,这就是我的追求 ...

  4. 【技术】基于数据库的权限设计

    基于数据库的权限设计 基于数据库的权限设计 表设计 基于数据库的权限设计 目前大部分的系统都需要权限控制,这也是系统的标配,目前市面上已经有很多成熟的权限框架,比如:Shiro.Spring Secu ...

  5. 数据库管理员用户角色组权限设计

    一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来更好的思考一下权限系统的设计. 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新 ...

  6. 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限...

    菜单权限是我们经常会遇到的权限,也是经常需要进行处理的权限,往往权限是通过控制菜单权限开始折腾起来的. 第一步:我的后台管理控制端,有一个叫模块配置的功能,这里集中配置,哪些模块可以用,哪些模块先锁定 ...

  7. 有简易通用权限管理后台的快速C# ASP.NET开发的例子应用程序卖给了曾长期开发JAVA银行程序的大哥...

    前几天,有一个已经有2年不做程序开发的大哥,购买了一套我的程序,其实这个大哥的水平也很厉害,但是由于有1-2年没做开发工作,以前的积累也都放弃了,现在可能是客户找他开发应用程序,要求的时间也比较短,所 ...

  8. 疯狂.NET架构通用权限后台管理工具演示版2.0下载

    程序未必是最好的,但是我目前所能拥有的程序里是最好的, 功能未必是最全的,但是我目前所能拥有的程序里是最好的. 不管我的再怎么不好,也有成熟的产品,商品化的成果物,请不要乱打击我,你有实力就把你的拿出 ...

  9. 品达通用权限系统(Day 1~Day 2)

    1. 项目概述 1.1 项目介绍 对于企业中的项目绝大多数都需要进行用户权限管理.认证.鉴权.加密.解密.XSS防跨站攻击等.这些功能整体实现思路基本一致,但是大部分项目都需要实现一次,这无形中就形成 ...

最新文章

  1. Failure [INSTALL_FAILED_ALREADY_EXISTS
  2. docker存储卷篇
  3. ibmmq 通道命令_IBM MQ 使用指南
  4. 【Linux】一步一步学Linux——set命令(222)
  5. 线性代数:特征值有重根时,相同特征值对应的不同特征向量顺序能交换吗?
  6. 理解向日葵甘特之六——定义数据列
  7. 【转】c# 协变与抗变
  8. final关键字_夯实基础:Java中final关键字的几种用法
  9. 学会用感情营销是最高的智慧
  10. python的平方运算符_python入门之与用户交互、运算符
  11. ondestroy什么时候调用_程序员最害怕的是什么—函数
  12. fashion minst
  13. 记一次被动的网卡升级:VMWare导致的无线网卡不能启用
  14. 药店千方百剂系统无法连接服务器,管家婆千方百剂软件常见问题解决办法分享...
  15. Cartoon CG:卡通渲染(开篇)
  16. 委托 和 事件 总括:
  17. (八)RHEL系统之红帽8操作系统基础环境配置及软件安装
  18. 闹钟和时间管理工具Alarm Clock Pro mac
  19. 穿越时空的爱恋-Z80 CPU的前世今生
  20. 我与工具--阅读和知识管理

热门文章

  1. Unity 3D学习笔记之一 界面介绍
  2. vista任务栏透明_在Windows XP中获取Vista任务栏缩略图预览
  3. macos剪切_如何使用macOS的内置“ Kill and Yank”作为替代剪切和粘贴
  4. ipad iphone开发_如何将iPhone或iPad置于恢复模式
  5. Vue使用Vuex一步步封装并使用store
  6. 5分钟内看懂机器学习和深度学习的区别
  7. activemq安全设置 设置admin的用户名和密码
  8. 稍微成型点的用WEBSOCKET实现的实时日志LOG输出
  9. HelloSilverlight
  10. 通用路由封装(GRE)×××配置