如何根据django中的用户限制模型中的某些字段
How to restrict certain fields in a model based on the user in django
我有一个部门 table。还有一个 Student table 引用部门 table。我还创建了一个自定义用户模型,UserAugment,以将部门字段添加到默认用户模型。
class Department(models.Model):
dname = models.CharField(max_length=200,primary_key=True)
def publish(self):
self.save()
def __str__(self):
return self.dname
class UserAugment(AbstractUser):
department = models.ForeignKey(Department,null=True,blank=True)
objects = UserManager()
class Student(models.Model):
sname = models.CharField(max_length=200)
usn = models.CharField(max_length=200,primary_key=True)
dept = models.ForeignKey(Department)
sem = models.IntegerField()
def publish(self):
self.save()
def __str__(self):
return '%s, %s' % (self.usn,self.sname)
现在,我需要创建用户,他们将有一个部门附属于他们。并且每个用户都应该被授予 add/edit/view 属于他们部门的学生的权限。我正在做噩梦。真的很简单吗?感谢您提供的任何帮助。
您可以在后台管理权限控制:
class UserAdmin(admin.ModelAdmin):
def has_change_permission(self, request, obj=None):
return self.user_has_permission(request, obj)
def user_has_permission(self, request, obj):
if hasattr(request.user, 'department') and obj is not None:
return request.user.department == obj.dept
return False
您可以用同样的方式实现 edit
和 delete
权限。
好吧,这对我来说终于有用了,
class StudentAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(StudentAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(dept=request.user.department)
我有一个部门 table。还有一个 Student table 引用部门 table。我还创建了一个自定义用户模型,UserAugment,以将部门字段添加到默认用户模型。
class Department(models.Model):
dname = models.CharField(max_length=200,primary_key=True)
def publish(self):
self.save()
def __str__(self):
return self.dname
class UserAugment(AbstractUser):
department = models.ForeignKey(Department,null=True,blank=True)
objects = UserManager()
class Student(models.Model):
sname = models.CharField(max_length=200)
usn = models.CharField(max_length=200,primary_key=True)
dept = models.ForeignKey(Department)
sem = models.IntegerField()
def publish(self):
self.save()
def __str__(self):
return '%s, %s' % (self.usn,self.sname)
现在,我需要创建用户,他们将有一个部门附属于他们。并且每个用户都应该被授予 add/edit/view 属于他们部门的学生的权限。我正在做噩梦。真的很简单吗?感谢您提供的任何帮助。
您可以在后台管理权限控制:
class UserAdmin(admin.ModelAdmin):
def has_change_permission(self, request, obj=None):
return self.user_has_permission(request, obj)
def user_has_permission(self, request, obj):
if hasattr(request.user, 'department') and obj is not None:
return request.user.department == obj.dept
return False
您可以用同样的方式实现 edit
和 delete
权限。
好吧,这对我来说终于有用了,
class StudentAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(StudentAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(dept=request.user.department)