如何将视图限制为用户组?

时间:2019-05-10 08:57:46

标签: django django-rest-framework

我正在使用Django 2.0。 我现在已经创建了用户组,我想使用用户组来限制视图。 哪个是解决此问题的最佳方法?

2 个答案:

答案 0 :(得分:0)

from django.contrib.auth.decorators import login_required, permission_required    
@method_decorator([
login_required,
permission_required('staff.tools_can_access', reverse_lazy('staff:login'), True)], name='dispatch')
class ToolsView(FormView):
    pass

首先将权限分配给您创建的组,然后更改permission_required参数。

使用通用视图将是完美的选择

答案 1 :(得分:0)

如果您希望只有属于特定组的用户才能访问view,则可以使用UserPassesTextMixin。 在下面的示例中,某个用户只有属于YourGroupName组才能访问该视图(我之所以这样命名,是因为我不知道您是如何命名的)

from django.contrib.auth.mixins import UserPassesTestMixin, LoginRequiredMixin 

class ToolsView(LoginRequiredMixin, UserPassesTestMixin, FormView):
    # ...

    def test_func(self):
        return self.request.user.groups.filter(name='YourGroupName').exists()

如果要使用基于函数的视图而不是基于类的视图,则可以执行以下操作:

from django.contrib.auth.decorators import login_required, user_passes_test, login_required

@login_required
@user_passes_test(lambda u: u.groups.filter(name='YourGroupName').exists())
def my_view(request, pk):
    # ....