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

  • 相关阅读:
    智能实验室-杀马(Defendio) 4.12.0.800
    智能实验室-结构化存储浏览器(SSExplorer) 1.7.0.170
    智能实验室-全能优化(Guardio) 4.94.0.830
    智能实验室-全能优化(Guardio) 4.9.0.790
    IT餐馆—第二十二回 控件
    当DiscuzNT遇上了Loadrunner(中)
    在Discuz!NT中进行缓存分层(本地缓存+memcached)
    介绍三个Silverlight 在线编辑器控件
    玩玩负载均衡在window与linux下配置nginx
    IT餐馆—第十八回 祭奠
  • 原文地址:https://www.cnblogs.com/wang_yb/p/10407683.html
Copyright © 2011-2022 走看看