Djinn内部认证模块,基于角色
项目描述
djinn_auth
Djinn基于角色的认证模块。该软件包也可以作为独立的模块使用,因为它与Djinn的其他软件包没有关联。
该模块基于django.contrib.auth模块,并扩展了基于角色的授权,包括全局角色和本地角色(或:特定模型实例的角色)。角色可以分配给用户和组。
对于(未)分配,您可以使用djinn_auth.utils中指定的API。这提供了分配角色到用户/组的全局和本地以及检查全局和本地角色的函数。特定的检查使您能够检查用户是否具有角色,无论是直接还是通过其组之一。
请注意,虽然此模块与特定的用户模型无关(因为这是一个可替换的模型),但它将假定至少存在用户权限关系。
全局权限
全局权限提供了一种全局授予用户或组权限的方式。这意味着在特定模型实例上的本地权限检查也会返回全局权限。
您可以通过以下方式给用户赋予权限:
通过User.user_permissions属性为用户赋予权限
为具有该权限的角色赋予用户
将用户添加到具有该角色权限的组中
将用户添加到具有该权限的组中
本地权限
您可以通过以下方式为特定模型实例的特定用户或组启用权限:
为具有该权限的对象赋予用户本地角色
为用户所属的组赋予具有该权限的本地角色
在对象上赋予用户权限
在对象上赋予用户所属组中的权限
要防止实例获取全局权限,实现acquire_global_roles属性并返回False。这启用了一种场景,即用户具有全局“允许”,但某些本地“禁止”。请注意,这仅禁止全局_role_,而不是用户或其组的直接权限。
如果您需要添加某种层次结构,您可以使用实例上的acquire_from属性来实现,该属性必须返回一个包含它希望获取角色/权限的实例的列表。
安装
使用_pip_或_easy_install_按常规方式安装。将djinn_auth添加到您的INSTALLED_APPS。将djinn_auth后端添加到AUTHENTICATION_BACKENDS设置
- AUTHENTICATION_BACKENDS = (
‘django.contrib.auth.backends.ModelBackend’, ‘djinn_auth.authbackend.AuthBackend’ )
使用
djinn_auth模块的基本使用与使用内置Django授权无区别。由于djinn_auth将其自己的后端添加到授权链中,因此您可以使用相同的装饰器或调用。以下是一些简单示例。请检查utils.py文件以获取完整的API。是的,您需要阅读Python代码..!
创建一个角色并添加权限
from djinn_auth.models import Role from django.contrib.auth.models import Permission
owner_role = Role.objects.create(name=”owner”)
do_something = Permission.objects.get(codename=”myapp.do_something”)
owner_role.add_permission(do_something)
为用户或组分配全局角色(假设您有一个用户_bobdobalina_)
>> from djinn_auth.utils import assign_global_role, has_global_role >> assign_global_role(bobdobalina, owner_role) >> has_global_role(bobdobalina, owner_role) True >>
这应赋予角色所授予的权限(请注意,后端通常由Django auth machinery使用_User.has_perm_调用调用)
>> from djinn_auth.authbackend import AuthBackend >> backend = AuthBackend() >> backend.has_perm(bobdobalina, “myapp.do_something”) True
撤销
>> from djinn_auth.utils import unassign_global_role >> unassign_global_role(bobdobalina, owner_role) >> has_global_role(bobdobalina, owner_role) False >> backend.has_perm(bobdobalina, “myapp.do_something”) False
分配本地角色
>> from djinn_auth.utils import assign_local_role, has_local_role >> instance = MyContentType.objects.get(pk=666) >> assign_local_role(bobdobalina, instance, owner_role) >> has_local_role(bobdobaline, instance, owner_role) True >> backend.has_perm(bobdobalina, “myapp.do_something”) False >> backend.has_perm(bobdobalina, “myapp.do_something”, obj=instance) True
视图
为了保护基于类的视图,djinn_auth提供了一个混合类,它添加了权限检查:djinn_auth.views.base.PermissionProtectedMixin。
使用如下
from django.views.generic.base import View from djinn_auth.views.base import PermissionProtectedMixin
class MyView(PermissionProtectedMixin, View)
permission = “myapp.view”
或甚至
class MyView(PermissionProtectedMixin, View)
permission = {‘GET’: ‘myapp.view’, ‘POST’: ‘myapp.edit’}
1.0.7
一些修复。一些库已更新
1.0.6
django 1.8+和向后兼容性
1.0.5
在get_local_roles上的便利性
管理增强
1.0.4
添加了基于组的实现
使auth后端“acquisition”启用
1.0.3
在utils方法中为角色作为字符串表示提供更多支持
1.0.2
添加了admin.py以用于管理UI
utils中的has_*_role函数现在可以接受角色名称以及对象
修复了用户模型交换的问题
添加了受保护的视图混合器
1.0.1
添加了全局角色的单元测试
更多README内容
修复了LocalRole中的repr问题
1.0.0
初始版本
项目详情
djinn_auth-1.0.7.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 41efaff0d7bca16bef662145ef447cec153bcad7047054e9339d6539d97f47f5 |
|
MD5 | 230b085c9ddf278cdfed2a4984d33dd8 |
|
BLAKE2b-256 | 3a559e0fe8657d273bad5f26a6141d0ea4051da5e848bd9697fe1f9a40435024 |