我需要创建1个以上的管理员用户,该用户只能向他在django中创建的用户管理角色/权限。此管理员应该只能看到他创建的用户,而不能看到其他用户创建的用户。简而言之,我希望将django用作我的客户的SaaS模型,他只能在其中管理员工/用户,这有可能吗?如何实现呢?例如。管理员A可以为其公司A创建用户并为其设置角色,管理员B可以为其公司B创建用户并设置其角色。但是同时,管理员A应该不能看到由管理员B创建的用户,反之亦然。
Step-1. django-admin startproject twoadminproject
Step-2. cd twoadminproject
Step-3. python manage.py startapp twoadminapp
Step-4. Change models.py of "twoadminapp" app:
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
created_by = models.CharField(max_length=30, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
Step-5. Change settings.py:
# Add you app in INSTALLED_APPS list
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'twoadminapp',
]
# Add one line at the end
AUTH_USER_MODEL = 'twoadminapp.User'
Run Code Online (Sandbox Code Playgroud)
Step-6. python manage.py makemigrations
Step-7. python manage.py migrate
Step-8. python manage.py createsuperuser (Execute this command twice for creating two admin users)
Step-9. Change admin.py of "twoadminapp" app:
from django.contrib import admin
from .models import User
# Register your models here.
class UserAdmin(admin.ModelAdmin):
def get_queryset(self, request):
users = super(UserAdmin, self).get_queryset(request)
return users.filter(created_by=request.user.username)
admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)
So, whenever you add user from admin panel, you have to fill admin username in the created by field of 'add user form' or you can initialize it in forms.py
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |