我正在构建一个Django Web应用程序,其中我有两个角色,例如sys_user
和exhibitor
。当sys_user
登录时,他可以访问所有网址和应用模块,但exhibitor
访问权限有限,即他可以访问特定的网址和应用模块。请考虑以下事项:
当sys_user
登录时,他应该看到(下面的侧边栏)并且可以访问所有模块,如:
--- Module1
--- Module2
--- Module3
--- Module4
当他应该看到exhibitor
日志时(下面的侧栏)并且只能访问以下模块,如:
--- Module1
--- Module2
现在我知道Django提供了自己的权限,但我真的不知道它们如何适应我的情况,或者是否还有其他替代方法。请指出我正确的方向。感谢
答案 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):