Python 权限控制模块 Casbin

目录
  • 简介
  • 为什么我要使用 Casbin?
  • PyCasbin 模块的使用
  • 例子
  • 权限测试

简介

Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。

casbin 的主要特性包括:

  • 支持自定义请求的格式,默认的请求格式为{subject, object, action};
  • 具有访问控制模型 model 和策略 policy 两个核心概念;
  • 支持 RBAC 中的多层角色继承,不止主体可以有角色,资源也可以具有角色;
  • 支持超级用户,如 root 或 Administrator,超级用户可以不受授权策略的约束访问任意资源;
  • 支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*;

casbin 不做的事情:

  • 身份认证
    authentication(即验证用户的用户名、密码),casbin 只负责访问控制。应该有其他专门的组件负责身份认证,然后由 casbin 进行访问控制,二者是相互配合的关系;
  • 管理用户列表或角色列表
    casbin 认为由项目自身来管理用户、角色列表更为合适,casbin 假设所有策略和请求中出现的用户、角色、资源都是合法有效的。

为什么我要使用 Casbin?

在我做的那么多的项目中,权限处理经常是一个比较头疼的问题,而且每个项目有不同的权限控制方式,我一直在想有没有一种通用的权限控制框架,可以适用各种不同的权限控制,每个项目只要做简单的修改就能完全适用,直到无意中看到 casbin 这个库。

目前我只是在初步的尝试使用,因此这里只做简单的使用记录,把我在项目中使用的记录下来,供自己后面继续研究使用,也算是给想要使用此库的 pythoner 一个例子。

官方文档地址

官方提供了一个非常好的编辑器,可以让我们直接体验和测试 casbin 的权限处理。

我们简单的以官方提供的例子来做一个说明,首先 Policy 里面配置的是权限策略,从权限策略中可以看出用户 alice 拥有角色 data2_admin,而角色 data2_admin 对数据 data2 有 read/write 权限,因此用户 alice 对数据 data2 拥有 read/write,可以看到下面的测试中也是 true。

以上就是我们使用编辑器测试权限的过程,只要搞清楚 RBAC 中权限关系就可以了。

PyCasbin 模块的使用

casbin 支持多种权限模型,我们最常用的是 RBAC,我们就以这种模式为例,来介绍一下在 Python 中怎么来使用。

安装:

pip install casbin

例子

1.初始化一个 enforcer,传入两个参数:模型文件路径和策略文件路径;
模型文件和策略文件都可以到库上下载,访问 gitee,搜索 pycasbin,在 examples 目录下载 rbac_model.conf

import casbin
e = casbin.Enforcer("path/to/model.conf", "path/to/policy.csv")

2.在你的代码需要进行访问控制的位置,加入如下钩子;

sub = "alice"  # the user that wants to access a resource.
obj = "data1"  # the resource that is going to be accessed.
act = "read"  # the operation that the user performs on the resource.

if e.enforce(sub, obj, act):
    # permit alice to read data1
    pass
else:
    # deny the request, show an error
    pass

pycasbin 本身拥有很多操作方法,因为它支持多种权限模型,所有有些接口是针对特定的模型设计的,但是众多的接口方法就会给用户带来困惑,因此我在这里只总结 RBAC 权限模型中我目前用到的这些接口,后期如果有新的接口使用,再加到文档内

在使用之前我们先分析一下常用的权限处理有哪些?

增加角色权限:

e.add_policy('super', 'user', 'add')

删除角色权限:

e.remove_policy('super', 'user', 'add')

增加用户权限:

e.add_permission_for_user('lisi', 'user', 'add')

删除用户指定权限:

e.delete_permission_for_user('lisi', 'user', 'add')

删除用户所有权限:

e.delete_permissions_for_user('zhangsan')

查询用户权限:

e.get_permissions_for_user('lisi')

增加用户角色:

e.add_role_for_user('zhangsan', 'admin')

删除用户指定角色:

e.delete_role_for_user('zhangsan', 'admin')

删除用户所有角色:

e.delete_roles_for_user('zhangsan', 'admin')

查询用户角色:

e.get_roles_for_user('zhangsan')

删除用户:

e.delete_user('zhangsan')

删除角色:

e.delete_role('admin')

删除权限:

e.delete_permission('add')

判断用户权限

e.enforce('super', 'user', 'add')

权限测试

以上面的示例为例,权限策略如下:

p, data2_admin, data2, read
p, data2_admin, data2, write
p, data1_admin, data1, read
p, data1_admin, data1, write
g, alice, data1_admin
g, bob, data2_admin

根据我们的推断用户 alice 对数据 data1 拥有 read 权限,使用 pycasbin 判断权限是否正常:

e.enforce('alice', 'data1', 'read')
# 输出 True

这就是我们目前需要用的的接口了,在官方文档中告诉我们 casbin 不能用来做用户管理和角色管理,建议由项目自身来管理用户列表和角色列表,因此我们需要创建单独的用户表和角色表,只不过以前是通过外键的方式将他们关联起来,现在只需要创建好表信息就行了,角色与用户的关系将通过 casbin 进行管理。

到此这篇关于Python 权限控制模块 Casbin的文章就介绍到这了,更多相关Python Casbin内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python的代理类实现,控制访问和修改属性的权限你都了解吗

    目录 本篇文章主要内容 代理类的一个简单的实现方式示例 一个实现日志输出的代理类的简化示例 总结 本篇文章主要内容 代理类主要功能是将一个类实例的属性访问和控制代理到代码内部另外一个实例类,将想对外公布的属性的访问和控制权交给代理类来操作,保留不想对外公布的属性的访问或控制权,比如只读访问,日志功能 1.代理类实现被代理类的属性访问和修改权限控制 2.异常捕获代理类的简化示例 代理类的一个简单的实现方式示例 目标:实现类Product的实例属性让另一个类Proxy来代理访问和控制,想将对外公布的

  • Python变量访问权限控制详解

    oop1.py文件代码 # user/bin/python class Foo: def bar(self): print('ok') def hello(self, name): print("i am %s" % name) foo = Foo() foo.bar() foo.hello('Fred Huang') class Foo: def __init__(self, name, age): ''' 初始化实例属性''' self._name = name "&qu

  • Python 权限控制模块 Casbin

    目录 简介 为什么我要使用 Casbin? PyCasbin 模块的使用 例子 权限测试 简介 Casbin是一个强大的.高效的开源访问控制框架,其权限管理机制支持多种访问控制模型. casbin 的主要特性包括: 支持自定义请求的格式,默认的请求格式为{subject, object, action}: 具有访问控制模型 model 和策略 policy 两个核心概念: 支持 RBAC 中的多层角色继承,不止主体可以有角色,资源也可以具有角色: 支持超级用户,如 root 或 Administ

  • Golang之casbin权限管理的实现

    1. 权限管理 Casbin是用于Golang项目的功能强大且高效的开源访问控制库. 1.1.1. 特征 Casbin的作用: 以经典{subject, object, action}形式或您定义的自定义形式实施策略,同时支持允许和拒绝授权. 处理访问控制模型及其策略的存储. 管理角色用户映射和角色角色映射(RBAC中的角色层次结构). 支持内置的超级用户,例如root或administrator.超级用户可以在没有显式权限的情况下执行任何操作. 多个内置运算符支持规则匹配.例如,keyMatc

  • thinkPHP5 ACL用户权限模块用法详解

    本文实例讲述了thinkPHP5 ACL用户权限模块用法.分享给大家供大家参考,具体如下: 最近学习thinkphp5,和以前3.X版本是完全不是一个概念.学习thinkphp5的朋友要注意命名空间思想. 最近做的一个项目,一个检测管理系统,由于为了以后做APP需要,才切换到thinkphp5作为以后的扩展API用的.今天完成的是用户权限控制模块.我把这个mark下来 数据库: role数据库表: `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `n

  • MySQL 权限控制细节分析

    今天周天,早上懒了一会儿,起的有点儿晚,中午没事儿干,重新看了看MySQL里面的权限控制模块,再次回头看,还是有很多收获的细节,这里记录一下,方便自己后续查看.     关于权限部分的内容,之前3月11号的文章中有写过一些,今天的内容,我们使用一个一个的细节知识点来撰写(本文中所使用的MySQL版本是5.7.16),在写这些知识点之前,我们首先介绍一下MySQL的权限控制粒度.然后了解一下MySQL中客户端发起请求的时候,服务端所做的核实工作,先来看权限控制粒度: 1.全局层级 全局权限使用于给

  • Golang基于JWT与Casbin身份验证授权实例详解

    目录 JWT Header Payload Signature JWT的优势 JWT的使用场景 Casbin Casbin可以做什么 Casbin不可以做什么 Casbin的工作原理 实践 登录接口请求 Token实现 使用Redis存储Token信息 用Casbin做授权管理 实现Casbin的策略 创建Todo JWT JSON Web Toekn(JWT)是一个开放标准RFC 7519,以JSON的方式进行通信,是目前最流行的一种身份验证方式之一. eyJhbGciOiJIUzI1NiIs

  • Go gin权限验证实现过程详解

    目录 权限管理 1. 特征 2. 怎么运行的 3. 安装 4. 示例代码 权限管理 Casbin是用于Golang项目的功能强大且高效的开源访问控制库. 1. 特征 Casbin的作用: 以经典{subject, object, action}形式或您定义的自定义形式实施策略,同时支持允许和拒绝授权. 处理访问控制模型及其策略的存储. 管理角色用户映射和角色角色映射(RBAC中的角色层次结构). 支持内置的超级用户,例如root或administrator.超级用户可以在没有显式权限的情况下执行

  • 详解Flask前后端分离项目案例

    简介 学习慕课课程,Flask前后端分离API后台接口的实现demo,前端可以接入小程序,暂时已经完成后台API基础架构,使用 postman 调试.git 重构部分: ken校验模块 auths认证模块 scope权限模块,增加全局扫描器(参考flask HTTPExceptions模块) 收获 我们可以接受定义时的复杂,但不能接受调用时的复杂 如果你觉得写代码厌倦,无聊,那你只是停留在功能的实现上,功能的实现很简单,你要追求的是更好的写法,抽象的艺术,不是机械的劳动而是要 创造 ,要有自己的

  • 开发环境Ubuntu16安装以后的初始化设置

    办公室需要ubuntu系统作为linux开发环境,目前大家用的多的是ubuntu16.04.所以这里也以ubuntu16.4作为办公开发环境来进行一些初始化. 打开命令行 ubuntu16.04版本 右键--打开终端 有的Ubuntu 14.04没有自带右键打开终端功能,用起来非常不方便.今天偶尔想起来,网上搜了一下,方法如下: $ sudo apt-get install nautilus-open-terminal 注销系统重新登录,即可. 设置root用户密码 ubuntu默认root密码

  • Ubuntu16.04安装python3.6.5步骤详解

    下载python3.6.5安装包 1.   上传安装包.打开终端,利用命令cd 进入文件所在文件夹里 python@ubuntu:~/workspace$pwd /home/python/workspace 2.   解压文件 tar xfzPython-3.6.5.tgz 注意:这里使用xfz命令,而不建议使用-xvzf命令,因为其释放的文件夹需要root权限才可以更改或者删除. python@ubuntu:~/workspace$tar xfz Python-3.6.5.tgz python

  • vitrualBox+ubuntu16.04安装python3.6最新教程及详细步骤

    因为这两天在学习深度学习需要用到ubuntu+python3.6版本,所以就按照网上的教学安装,但是ubuntu16.04自带的是python2.7和3.5版本,所以需要另外安装.但是安装了半天浪费了一整天时间踩了各种坑.最后终于成功了.因此写下此教程帮助后人,免走歪路. 以下是一路安装时的一些tips: 安装ubuntu16时,最后会下载语言包,因为是用的国外的源,需要花费大量时间,因此可以先点击skip跳过.后面修改源再来继续安装. 在搜索里找到软件和更新,里面可以切换下载源,我选的是阿里云

随机推荐