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

时间:2015-10-27 15:10:47

标签: python django user-roles django-permissions

我正在构建一个Django Web应用程序,其中我有两个角色,例如sys_userexhibitor。当sys_user登录时,他可以访问所有网址和应用模块,但exhibitor访问权限有限,即他可以访问特定的网址和应用模块。请考虑以下事项:

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

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

当他应该看到exhibitor日志时(下面的侧栏)并且只能访问以下模块,如:

--- Module1
--- Module2

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

1 个答案:

答案 0 :(得分:0)

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

来自Django docs:

{% 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

也可以在网址级别上执行:

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):