我正在寻找一些关于其他人如何构建这一点的意见.我将提供基于类(Django组)的视图.

例如,用户的组将决定他或她将有权访问哪些视图/模板.我正在考虑在一个表中存储查看函数的路径,以确定用户的链接栏将由什么组成.还可以存储过滤器规格,以确定哪些行将填充这些模板.

医院护理单位就是一个很好的例子.一个单位的护士不需要看整个医院的病人.他们只需要go 看他们的病人.同一单位的doctor 也只需要看这些患者,但他们应该可以获得更大的功能.

这是通过第三方应用程序实现的吗?你会如何处理这个问题?

谢谢, 皮特

推荐答案

Django已经有了一个组和权限系统,这可能足以满足您的需要.

http://docs.djangoproject.com/en/dev/topics/auth/

通常,在您的代码中判断用户是否有权限.用户有他自己的权限和他所属组的权限.您可以从管理控制台轻松地进行管理.

您需要注意两个部分.

  1. 判断请求页面的用户 有这样做的许可.
  2. 仅在以下情况下显示指向用户的链接 有这个权限.

1.您可以在decorator 中判断权限,如下所示:

from django.contrib.auth.decorators import permission_required

@permission_required('polls.can_vote')
def some_view(request):

对于2.当前登录用户的权限存储在模板变量{{perms}}中.此代码判断与上面相同的权限.

{% if perms.polls.can_vote %}
    <a href="/vote">vote</a>
{% endif %}

要生成链接列表,您可以迭代user.get_all_permission()并从字典中获取链接(或生成链接的函数):

def more_elaborate_list_of_links_for_a_perm(user):
    return ["/link1", ...]

_LINKS = {
    'polls.can_vote' : lambda u: ["/user/specific/link/" + u.id],
    'polls.can_close': lambda u: ['/static/link/1', 'static/link/2'],
    'polls.can_open' : more_elaborate_list_of_links_for_a_perm
}

def gen_links(user):
    # get_all_permissions also gets permissions for users groups
    perms = user.get_all_permissions()
    return sum((_LINKS[p](user) for p in perms if p in _LINKS), [])

可能还有很多其他的方法.

Django相关问答推荐

如何在管理页面创建实例时只在ManyToManyField字段中显示超级用户

RDBMS多对多关系Django

Django AWS S3对象存储boto3媒体上传报错

root urls.py 是 Django 中的 config/urls.py 吗?

更新或创建异步 Django ORM 实例

基于模型多选字段在模板django中显示结果

在 django HTML 邮箱模板中使用字体

ModelForm 的 Django TextField max_length 验证

如何在 django tests.py 中创建管理员用户

Django - 如何从模型实例中获取管理员 URL

使用 Gunicorn 运行 Django - 最佳实践

如何使用 django-nose 运行单个测试或单个 TestCase?

在 Django 中使用邮箱地址或用户名登录用户

如何在 Django 中触发 500 错误?

import_module 的 Django 1.9 ImportError

将 Django Rest Framework 与序列化程序一起使用时出现 AttributeError

如何找到两个 Django 查询集的交集?

如何使用或使用 Django 的模型过滤系统?

Django:DoesNotExist从何而来?

如何在 django 2.0 admin 中使用 allow_tags?