对 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):
我正在构建一个 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):