【问题标题】:How To Restrict Pages or Models based on User/Group Permissions with CBVs?如何使用 CBV 根据用户/组权限限制页面或模型?
【发布时间】:2013-12-27 18:52:29
【问题描述】:

感谢 Sk1p 的解决方案:

从 django.contrib.auth.decorators 导入权限要求

ip_manager/urls.py:

urlpatterns = patterns('',
    url(r'^(?P<groupname>\w+)/tag/add/$', permission_required('ip_manager.add_tag')(TagFormView.as_view()), name='tag-add'),
)

我试图限制用户添加、更改或删除模型。我只使用 CBV。我看过下面的例子..

Decorating the class

和

How to use permission_required decorators on django class-based views

我的问题是我想告诉用户需要访问哪个权限,但我不确定如何指定它。我尝试在 login-required 中将权限作为 arg 传递,并在没有设置权限的用户上对其进行了测试。这种方法不起作用,它仍然允许我添加一个新的模型对象。有人有什么建议吗?

ip_manager/urls.py:

urlpatterns = patterns('',
    url(r'^(?P<groupname>\w+)/tag/add/$', login_required(TagFormView.as_view(), 'ip_manager.add_tag'), name='tag-add'),
)

谢谢, 瑞恩

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果要指定所需的权限,则需要使用the permission_required decorator。因为它需要一个参数,所以应该像下面这样工作:

    permission_required("your_permission")(TagFormView.as_view())
    

    这在文档中也有说明:Decorating class-based views

    【讨论】:

    • 哇,如果我刚刚阅读了一篇关于装饰基于类的视图的段落,我会明白的。谢谢大佬。
    【解决方案2】:

    另一种限制基于类的视图(而不是 URL 路由)的权限的方法是在管理面板中使用 Groups 并在视图本身上使用 PermissionRequiredMixin。只需像这样应用PermissionRequiredMixin...

    class MemoCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateView):
        permission_required = 'memos.can_change_memo'
        model = Memo
    

    ...然后在管理面板中将用户添加到特定的Groups 并将can_change_memo 权限应用于该Group.. 或者更好的是,将组应用于注册用户!

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 2014-09-28
      • 1970-01-01
      • 2016-10-18
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      相关资源
      最近更新 更多