Django 中的功能权限

Posted

技术标签:

【中文标题】Django 中的功能权限【英文标题】:Functional permissions in Django 【发布时间】:2017-04-03 04:24:23 【问题描述】:

在 Django 中是否有一种内置的方式来为用户分配功能权限?从documentations 看来,Dajngo 权限已绑定到模型。

例如,我想要创建 4 种类型的用户组:普通用户、经理、管理员和超级管理员。

默认情况下,不同组中的用户将有权执行不同类型的操作。例如 Admin 组的用户可以执行 Task1、Task2 和 Task3,但 Managers 组的用户只能执行 Task1 和 Task2(无论这些任务在哪个应用程序中)。

此外,可以为用户修改用户权限以撤销执行某些任务的访问权限。例如,默认情况下,所有管理员都可以执行任务 1、任务 2 和任务 3,但可以修改特定管理员的权限以仅执行任务 1 和任务 3。

这可以通过构建 Django 权限和组来实现,还是需要编写自己的权限系统(或者是否有第三方 Django 应用程序可以做到这一点)?

如果写自己的权限和组系统会更好,任何设计建议都可以遵循。

谢谢!

【问题讨论】:

has_permission 装饰器可用于视图,需要管理很多东西——用户、组和权限。我已经使用 django-guardian 进行基于角色的访问控制。它可能适合您的需求。 【参考方案1】:

您可以在管理页面中设置权限,如 foo.can_write 或在您自己的视图中,如

myuser.user_permissions.add(permission, permission, ...)

在视图中,您可以设置某些操作所需的权限。来自文档:

from django.contrib.auth.decorators import permission_required
@permission_required('polls.can_vote')
def my_view(request):

【讨论】:

以上是关于Django 中的功能权限的主要内容,如果未能解决你的问题,请参考以下文章

Django实战1-权限管理功能实现-02:项目设置

Django的用户模块与权限系统

Django的用户模块与权限系统

django 权限功能(根据不同的用户,设置不同的显示和访问权限)

仅具有查看权限的 Django 模型表单将所有字段排除在外

django项目后台权限管理功能。