Django 管理员向特定组添加条目

Django admin add entry to specific groups

嘿!

我正在寻找添加不同用户和组条目的可能性。 在我的应用程序中,有不同的用户和不同的组,其中一个用户可以属于多个组。目标是某些组具有敏感数据,因此我只希望该组的成员能够读取条目,但某些数据应该在多个组中可用。 也应该可以只看到一些信息。 (例如,看到名字而不是地址)

目前,我的所有视图都有装饰器 @login_required,persons_view 有装饰器 @permission_required。因此,您必须是注册用户才能看到任何内容,这很好但还不够。 我还创建了组(通过管理区域),但无法过滤每个 model/view 的数据。该组要么看到数据,要么看不到数据。

用户注册连接到现有的 ldap 系统(这些组是预先定义的。使用它们会很棒!)

是否可以只为特殊组添加条目并仅查看部分给定信息?

感谢您的帮助!

如果你想限制或指定组的视图,你应该使用两个 mixin:UserPassesTestMixin 和 LoginRequiredMixin。

  1. LoginRequiredMixin 只会确保请求中的用户已登录
  2. UserPassesTestMixin 将检查来自我们定义的布尔表达式的请求,如果它 returns True 它将让用户进入

我们可以使用 test_func 方法进行设置,该方法将 return 为 True 或 False 这是您可以在视图中使用的示例

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

class Index(LoginRequiredMixin, UserPassesTestMixin,View):
def get(self, request):
    return render(request, 'nioulboy/index.html')

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

在 test_func 方法中,如果 request.user 有一个名为 Admin 的组,我们 return 为真。
如果它 returns True,它将允许用户查看 index page 如果它 returns False,它将发回 403 error.

对于不基于 class 的视图,使用此功能来授予对整个视图的权限。

# views.py

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

def user_check(user):
    return user.groups.filter(name="Admin")

@user_passes_test(user_check)
@login_required
def view(request):
    ....