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权限。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用于切换状态结果的枚举的java输入   检测*NIX上打开的端口时出现java问题   java捕获和保存屏幕截图   java SLF4JLogback:基于日志级别的多模式   Java从字符串中删除动态子字符串   在spring引导中contextLoads测试时运行java Liquibase   基于规则集的任意嵌套POJO的java任意就地转换   java如何做,边做边循环这段代码?   java是什么导致jmh测量中的错误?   java Spring RabbitTemplate执行方法可见性   java jms创建连接http超时weblogic   java如何在JMapViewer中的两点之间放置像箭头一样的图像   在我的形状计算器Java程序中使用带有Switch/Case语句的循环   字符串如何在Java中比较字符和数字