Python权限管理框架Casbin PyCasbin的简单操作

Casbin 简介

Casbin 是一个强大和高效的开放源码访问控制库,它支持各种 访问控制模型 以强制全面执行授权。

大多数应用都会和权限与权限管理打交道,有的时候我们希望有一套拿来即用的权限管理框架,既可以在小型的个人应用中使用,又可以应付大型应用的复杂权限的管理,Casbin可以满足你的这个小小愿望.Casbin支持多种编程语言,今天我们来试试Casbin在python下的简单操作.

安装

pip install casbin

除了安装支持的casein库,我们还需要两个配置文件, model.confpolicy.csv。 其中, model.conf 存储了我们的访问模型, 而 policy.csv 存储的是我们具体的用户权限配置。

test.py

import casbin
import os

# model.conf 和 policy.csv 文件地址
model_dir = os.path.join(os.path.dirname(__file__), 'model.conf')
policy_dir = os.path.join(os.path.dirname(__file__), 'policy.csv')

# 加载配置文件
e = casbin.Enforcer(model_dir,policy_dir)

model.conf文件里是一个ACL (Access Control List, 访问控制列表)的配置文件

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

policy.csv文件载入一些策略

p, alice, data1, read
p, bob, data2, write

test.py文件后边我们将进行一些关于权限的测试,下边是整个文件的代码.

import casbin
import os

# model.conf 和 policy.csv 文件地址
model_dir = os.path.join(os.path.dirname(__file__), 'model.conf')
policy_dir = os.path.join(os.path.dirname(__file__), 'policy.csv')
# 加载配置文件
e = casbin.Enforcer(model_dir,policy_dir)
sub = "alice"  # 想要访问资源的用户
obj = "data1"  # 将要被访问的资源
act = "read"  # 用户对资源进行的操作

def getEnforce(sub, obj, act):
    """
    执行器的封装
    """
    if e.enforce(sub, obj, act):
        # 允许alice读取data1
        return True
    else:
        # 拒绝请求,抛出异常
        return False
        
if __name__ == '__main__':
    print(getEnforce(sub,obj,act))

运行程序后会输出一个True,上边的代码我觉得不用过多的解释,看注释基本就可以明白运行的原理了.

在数据库里存放策略

将策略存放在数据库里,这样更接近实际的操作,这里我们使用casbin_sqlalchemy_adapter这个库,它封装好了很多有关casein数据库的操作的方法,可以拿来直接使用.

安装

pip install casbin_sqlalchemy_adapter

然后我们吧policy_dir更换为数据库里的一个表.更改test.py文件的前半部分:

# model.conf 和 policy.csv 文件地址
model_dir = os.path.join(os.path.dirname(__file__), 'model.conf')
# policy_dir = os.path.join(os.path.dirname(__file__), 'policy.csv')
# 组装数据库的绝对地址
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_DIR = os.path.join(BASE_DIR, 'test.db')
# 数据库访问地址
SQLALCHEMY_DATABASE_URL = "sqlite:///" + DB_DIR
# 从数据库加载casbin的policy
adapter = casbin_sqlalchemy_adapter.Adapter(SQLALCHEMY_DATABASE_URL)
e = casbin.Enforcer(model_dir, adapter)
e.add_policy(["alice", "data1", "read"])

这里我们注释掉了policy.csv文件的磁盘上的地址,跟换为数据库,当运行程序的时候,会创建一个数据库和一个表casbin_rule,其中casbin_rule存放的数据和policy.csv是一样的,我们可以通过e.add_policy()来添加策略,也可以批量添加,或是更新删除策略.

修改完代码后,运行程序,会发现和之前使用.csv文件是一样,是不是很方便,Casbin可以创建很多种权限控制模式,例如rbac等,网上介绍使用的教程很少,不过我个人感觉这个框架还是很不错的,用起来也方便,省去很多麻烦.

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你想要了解有关权限管理的演示,使用的是基于角色的访问控制(RBAC)和 Casbin 的解决方案。Casbin 是一个强大的授权库,它提供了灵活的访问控制模型和规则引擎。下面是一个简单的 RBAC 和 Casbin权限管理演示: 1. 安装 Casbin: ``` pip install casbin ``` 2. 创建一个示例访问控制模型(model.conf),定义了用户、角色、资源和操作: ``` [request_definition] r = sub, obj, act [policy_definition] p = sub, obj, act [role_definition] g = _, _ [policy_effect] e = some(where (p.eft == allow)) [matchers] m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act ``` 3. 创建一个权限管理策略文件(policy.csv),定义了角色与资源的访问权限: ``` p, alice, data1, read p, bob, data2, write g, alice, admin ``` 4. 在 Python 中使用 Casbin 进行权限验证: ```python from casbin import Enforcer # 加载访问控制模型和策略文件 enforcer = Enforcer("model.conf", "policy.csv") # 验证用户的访问权限 if enforcer.enforce("alice", "data1", "read"): print("alice 有读取 data1 的权限") else: print("alice 没有读取 data1 的权限") if enforcer.enforce("bob", "data2", "write"): print("bob 有写入 data2 的权限") else: print("bob 没有写入 data2 的权限") ``` 这只是一个简单的 RBAC 和 Casbin权限管理演示,你可以根据实际需求自定义更复杂的访问控制模型和策略。希望这个演示对你有帮助!如果你对 Casbin 想要了解更多信息,可以参考官方文档:https://casbin.org/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这里不提提纳里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值