首页 > 编程语言 >java使用casbin

java使用casbin

时间:2022-10-13 11:59:18浏览次数:84  
标签:存储 java 角色 casbin 用户 访问控制 使用 资源

casbin

casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。,而业界常常使用的RBAC(基于角色的权限访问控制),也是很完美的支持.整个项目都是基于PML 的论文,还是很厉害的.

集成和基本应用

通过maven集成

引入对应jar包,如果用数据库存储policy,可以考虑引用adapter的包,也可以自己去实现对应查询sql和数据库表结构

        <dependency>
            <groupId>org.casbin</groupId>
            <artifactId>jcasbin</artifactId>
            <version>1.28.0</version>
        </dependency>
        <dependency>
            <groupId>org.casbin</groupId>
            <artifactId>jdbc-adapter</artifactId>
            <version>2.3.2</version>
        </dependency>

自定义实现存储policy

org.casbin.jcasbin.main.CoreEnforcer#loadPolicy

enforce加载policy就是通过该方法,所以理论上自定义class实现Adapter接口就行,这样可以少引入一个adapter包,而且可自定义字段和表名.

代码实现

首先RBAC结构性下,用户和角色关系,角色和资源位关系都是多对多,在casbin中,我们存储的就是对角色对应的资源位的关系.用户,角色,资源等位置需要自己去单独存储.主要依赖2种主要api,看使用情况

初始化Enfoce

Enforcer e = new Enforcer("examples/rbac_model.conf", "examples/rbac_policy.csv");

生成全局使用的enfoce对象, 后续所有操作都是对该对象上的接口的调用

用户关联角色和域

  1. 需要提前将用户,角色等相关信息查询出来
  2. 调用下面方法对用户和角色进行绑定
boolean added = e.addRoleForUser("alice", "data2_admin");

角色关联资源

  1. 实现adapter之后,将角色和资源关联关系存储到了数据库中
  2. 新增策略就是直接调用对应的保存接口
e.addPolicy(new Policy("fulln", "/test", "GET"));
e.savePolicy();

角色关联访问动作

这一步可以不用写,如果有特定的资源访问可以后续在写入,

e.AddPermissionForUser("bob", "read")

权限检查

在访问到对应资源之前先走一遍查询, 如果成功就可以直接访问, 如果失败, 则进行自定义的信息返回.

String sub = "alice"; // 想要访问资源的用户/角色
String obj = "data1"; // 将要被访问的资源
String act = "read"; // 用户对资源进行的操作

if (e.enforce(sub, obj, act) == true) {
    // 允许alice读取data1
} else {
    // 拒绝请求,抛出异常
}

总结

Casbin 可以:

  1. 支持自定义请求的格式,默认的请求格式为{subject, object, action}。
    具有访问控制模型model和策略policy两个核心概念。
  2. 支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。
  3. 支持内置的超级用户 例如:root或administrator。超级用户可以执行任何操作而无需显式的权限声明。
  4. 支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*

Casbin 不能:

  1. 身份认证 authentication(即验证用户的用户名、密码),casbin只负责访问控制。应该有其他专门的组件负责身份认证,然后由casbin进行访问控制,二者是相互配合的关系。
  2. 管理用户列表或角色列表。 Casbin 认为由项目自身来管理用户、角色列表更为合适, 用户通常有他们的密码,但是 Casbin 的设计思想并不是把它作为一个存储密码的容器。 而是存储RBAC方案中用户和角色之间的映射关系。

casbin 和我们常用的管理最大的不同就是,它只针对权限的控制.用户,角色等的都需要自行去存储,不过这样也为了后续扩展提供了很大的便利.

标签:存储,java,角色,casbin,用户,访问控制,使用,资源
From: https://www.cnblogs.com/wzqshb/p/16787675.html

相关文章

  • Java实战项目双11互联网电商秒杀系统解决方案(视频+源码)
    技术类型:UI设计资源分类:学习视频资料文件大小:5.22G Java实战项目双11互联网电商秒杀系统解决方案(视频+源码)共计视频课程66课时+源码+相关软件+相关文档 下载地址:点......
  • jquery使用案例
     jq实现点击一级菜单div,有且只有它下面的二级菜单进行伸缩展开访问时如下:   ......
  • ThreadPool ExecutorService使用invokeAll提交多个任务并等待结果返回
    https://blog.csdn.net/liangwenmail/article/details/79421029  invokeAll可以提交多个任务,在任务完成前该方法会阻塞,直到所有任务完成或中断或超时,返回Future列表。......
  • ThreadLocal原理及使用场景
    ​ThreadLocal意为线程本地变量,用于解决多线程并发时访问共享变量的问题。​所谓的共享变量指的是在堆中的实例、静态属性和数组;对于共享数据的访问受Java的内存模型(JMM......
  • Java集合框架
    什么是集合概念:对象的容器,定义了对多个对象进行操作的常用方法。可以实现数组的功能和数组的区别:数组长度固定,集合长度不固定数组可以存储基本类型和引用类型,集合只......
  • docker Gitlab 安装、配置、部署、使用
    一.镜像容器1.安装docker yuminstalldocker使用yum命令在线安装安装后查看Docker版本docker-v2.查找GitLab镜像dockersearchgitlab3.拉取镜像dock......
  • 【3d-force-graph】3d-force-graph-三维力导向图-知识图谱配置和使用
    效果图文档可以先去官网看看文档或者看看我下面的参考博客,把基本配置看懂。github.com/vasturiano/3d-force-graph3d-force-graph:文档翻译配置//初始化3dfuncti......
  • 力扣554(java&python)-砖墙(中等)
    题目:你的面前有一堵矩形的、由n行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和相等。你现在要画一条自顶向下的、穿过最......
  • mysql语句-----函数使用
    总结常用函数及使用方法1.字符串相关函数  --返回字符串字符集CHARSET(str)selectcharset(ename)fromemp;--连接字符串CONCAT(string[,…])selectc......
  • Unity使用DOTS开发前准备工作
    该文章发布时使用的unity编辑器版本为2023.1.0该文章用到的DOTS版本为1.0使用DOTS开发前先修改Unity编辑器一些位置Edit->ProjectSettings✔勾上EnterPlayMod......