对 Django 中不同角色的访问受限

Limited access to different roles in Django

我正在构建一个 Django 网络应用程序,我在其中扮演两个角色,例如sys_user 和一个 exhibitor。当 sys_user 登录时,他可以访问所有 url 和应用程序模块,但 exhibitor 将具有有限的访问权限,即他将可以访问特定的 url 和应用程序模块。考虑以下因素:

sys_user 登录时,他应该看到(以下边栏)并可以访问所有模块,例如:

--- Module1
--- Module2
--- Module3
--- Module4

exhibitor 登录时,他应该看到(以下边栏)并且只能访问以下模块,例如:

--- Module1
--- Module2

现在我知道 Django 提供了自己的权限,但我真的不知道它们如何适合我的情况,或者是否有任何其他替代方法。请指出正确的方向。谢谢

如果您想在模板级别执行此操作,权限存储在 {{ perm }} 变量中。

来自 Django 文档:

{% if perms.foo %}
    <p>You have permission to do something in the foo app.</p>
    {% if perms.foo.can_vote %}
        <p>You can vote!</p>
    {% endif %}
    {% if perms.foo.can_drive %}
        <p>You can drive!</p>
    {% endif %}
{% else %}
    <p>You don't have permission to do anything in the foo app.</p>
{% endif %}

可以找到更多信息 here

也可以在 url 级别上进行:

from django.contrib.auth.decorators import login_required
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
    (r'^foo/$', login_required(direct_to_template), {'template': 'foo_index.html'}),
    )

本例中使用了login_required装饰器。但是你可以创建你自己的装饰器,在那里你将检查请求对象中的用户并基于它,决定做什么(重定向,禁止页面等)

Here 是 Django 中装饰器用法的综合示例。

自定义装饰器的简单示例:

from django.contrib.auth.decorators import login_required, user_passes_test

@login_required
@user_passes_test(lambda u: u.user_name != 'sys_user', login_url='/myapp/denied/')
def some_view(request):