【问题标题】:Django permissions checks at urlconf level?Django 权限检查在 urlconf 级别?
【发布时间】:2014-07-19 10:35:50
【问题描述】:

我有一个 django 应用程序,它自己的 urlconf 包含在主程序中。此应用程序中的每个页面都受一组单独的权限保护,这些权限不授予普通用户。考虑员工的工作视图而不是用户的个人资料等。

我正在使用基于类的视图,所以现在我已经获得了登陆视图的 dispatch() 检查权限,但是使用这种方法,我将不得不对每个视图都这样做。那只是不干。

所以我的选择是:

  • 创建一个专门检查此权限的 mixin
  • 在每个视图中使用 dispatch() 手动检查
  • 以某种方式在 url 级别检查

有没有办法对整个 url 包含设置权限要求?他们目前都开启了 login_required()。

【问题讨论】:

    标签: django url permissions django-class-based-views


    【解决方案1】:

    简单!

    from django.contrib.auth.decorators import login_required
    
    urlpatterns = patterns('',
        url(r'^foo/', login_required(include('foo.urls'))),
    )
    

    更新

    您要检查用户权限,而不是用户身份验证。也很简单:

    from django.contrib.auth.decorators import user_passes_test
    
    urlpatterns = patterns('',
        url(r'^foo/', user_passes_test(lambda u: u.has_perm('perm'))(include('foo.urls'))),
    )
    

    【讨论】:

    • 过会儿去试试。如果失败,这会抛出 403 吗?
    • 不,它重定向到 LOGIN_URL。如果您希望它重定向到另一个 url,请在 lambda 函数之后传递它。
    • 您可以使用permission_required 代替 user_passes_test。您可以将该函数配置为引发异常,而不是重定向到 LOGIN_URL。
    • 我试过这个,但现在我的登录视图找不到包含的视图 revserse()
    猜你喜欢
    • 2018-01-09
    • 2019-07-29
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2012-05-17
    • 2015-09-13
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多