跳转到主要内容

Djinn内部认证模块,基于角色

项目描述

djinn_auth

Djinn基于角色的认证模块。该软件包也可以作为独立的模块使用,因为它与Djinn的其他软件包没有关联。

该模块基于django.contrib.auth模块,并扩展了基于角色的授权,包括全局角色和本地角色(或:特定模型实例的角色)。角色可以分配给用户和组。

对于(未)分配,您可以使用djinn_auth.utils中指定的API。这提供了分配角色到用户/组的全局和本地以及检查全局和本地角色的函数。特定的检查使您能够检查用户是否具有角色,无论是直接还是通过其组之一。

请注意,虽然此模块与特定的用户模型无关(因为这是一个可替换的模型),但它将假定至少存在用户权限关系。

全局权限

全局权限提供了一种全局授予用户或组权限的方式。这意味着在特定模型实例上的本地权限检查也会返回全局权限。

您可以通过以下方式给用户赋予权限:

  1. 通过User.user_permissions属性为用户赋予权限

  2. 为具有该权限的角色赋予用户

  3. 将用户添加到具有该角色权限的组中

  4. 将用户添加到具有该权限的组中

本地权限

您可以通过以下方式为特定模型实例的特定用户或组启用权限:

  1. 为具有该权限的对象赋予用户本地角色

  2. 为用户所属的组赋予具有该权限的本地角色

  3. 在对象上赋予用户权限

  4. 在对象上赋予用户所属组中的权限

要防止实例获取全局权限,实现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 (18.1 kB 查看哈希值)

上传时间 源代码

由以下支持