Django权限处理程序的模块化注册表
django_callable_perms的Python项目详细描述
关于
django_callable_perms实现了权限处理程序的模块化注册表。 处理程序可以注册为简单的权限回调,如下所示 django有_perm参数。
所有权限回调都可以实现所需的权限检查。作为 我们讨论回调,意思是可执行代码,你可以把所有东西 你需要进去。
示例
django本身缺少对行级权限的支持。您可以使用 认证后端和现有的应用程序来实现这一点。无论如何 这些解决方案中的大多数都会增加一些开销,并且不能真正提供 灵活的权限。
django_callable_perms不关心要实现哪些权限 但适合行级权限非常好。所以让我们从真实的例子开始。 给定这样的模型:
class Article(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(User)
您可能需要添加权限检查,因此仅允许作者 编辑他/她的文章。现在django_callable_perms可以用来添加 检查如下:
# may be put into permissions.py inside the app from django_callable_perms import register from .models import Article def author_may_always_edit(user, perm, obj): # no additional database query needed! if obj.author_id == user.pk: return True register( 'app.change_article', # permission name author_may_always_edit, # callback function Article, # model, for which the permission check is implemented # may be "None", if no instance is required )
之后的权限检查只遵循默认的django行为。使用 {%get_obj_perms%}在模板内。
{% get_obj_perms for user accessing obj as obj_perms %} {% if obj_perms.app.change_article %} {# show edit link #} <a href="...">Edit</a> {% endif %}
注意:如果您需要自己的权限,则不需要将它们添加到 数据库(见django文档),大多数时候只需注册 新权限。
安装
将django_callable_perms添加到INSTALLED_APPS(用于自动加载)并添加 django_callable_perms.backends.CallablePermissionBackend到您的 AUTHENTICATION_BACKENDS。
确保首先将django_callable_perms放入python路径 当然。
附加功能
自动加载
将在已安装的应用程序中加载所有权限.py。
同步权限
在数据库中创建所有应用程序权限的管理命令。可能是 用于初始化数据库。不会(意思是永远不会)添加超过 默认django权限。