Django基于角色的视图?

我正在寻找有关其他人如何设计此方法的意见。我将提供基于类(Django组)的视图。

例如,用户组将确定他或她将有权访问哪些视图/模板。我正在考虑也许在表中存储用于查看功能的路径,以确定用户的链接栏将由什么组成。过滤器规范也可以存储,以确定哪些行将填充这些模板。

医院护理单位就是一个很好的例子。一个单位的护士不必看整个医院的病人。他们只需要去看病人。同一部门的医生也只需要看望那些患者,但是他们应该可以使用更多的功能。

这是通过某些第三方应用程序完成的吗?您将如何解决这个问题?

回答:

Django已经有一个组和权限系统,这可能足以满足你的目的。

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

通常,在你的代码中,你检查用户是否具有权限。用户具有自己的权限以及他所属的组的权限。你可以从管理控制台轻松进行管理。

你需要看两部分。

  1. 检查请求页面的用户是否有权这样做。
  2. 仅在用户获得许可的情况下显示指向用户的链接。

    对于1.,你可以像这样检查装饰器中的权限:

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_permissions()并从字典中获取链接(或生成链接的函数):

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基于角色的视图? 的全部内容, 来源链接: utcz.com/qa/410270.html

回到顶部