如何根据CBV的用户/组权限限制页面或模型?

时间:2013-12-27 18:52:29

标签: python django

解决方案感谢Sk1p:

来自django.contrib.auth.decorators import permission_required

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'),
)

谢谢, 莱恩

2 个答案:

答案 0 :(得分:1)

如果要指定所需的权限,则需要使用the permission_required decorator。因为需要参数,所以类似下面的内容应该有效:

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

文档中也说明了这一点:Decorating class-based views

答案 1 :(得分:0)

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

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

...,然后将用户添加到管理面板中的特定Groups并对该can_change_memo应用Group权限。或者更好的是,将组应用于登录的用户-