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 JPanel不会对键绑定做出反应   当时间大于零时,不得在UI线程上调用java Await   JTextArea的java线程安全。追加   Java用户输入的字和行计数器   java以spreedsheat格式将数据保存到文件中   java构造函数的意义是什么?   java findViewById返回null,尽管组件的ID存在   java如何向按钮添加图像   java如何中断ExecutorService的线程   java如何将属性(例如枚举)绑定到不同类型的组件属性(例如每个枚举的映像)?   随机森林分类器的java实现   html使用java连接到一个站点并发布,HTTP状态代码200   从类访问属性时发生java编译错误   Java自动填充ArrayList,搜索更好的选项