如何解决为Django组中的用户分配权限
我将Django(3)与使用BaseAbstractUser
的自定义用户模型一起使用,其中我有一个名为is_instructor
的BooleanField字段,并且还创建了一个名为instructor
的组。因此,当用户使用is_instructor
注册时,他将拥有instructor
组的所有权限。在这个组中,我在Django管理员中分配了与我的courses
应用相关的所有权限。现在,如果我尝试使用具有instructor
组权限的用户创建新课程,它将我重定向到错误的登录页面,则我的实际登录URL路径为/users/login
,但它将我重定向到'/ accounts / login `。
这是我的模特:
class Account(AbstractBaseUser,PermissionsMixin):
email = models.EmailField(verbose_name='email',max_length=60,unique=True)
fullname = models.CharField(max_length=30,unique=True)
is_instructor = models.BooleanField(default=False)
date_join = models.DateTimeField(verbose_name='date joined',auto_now_add=True)
last_login = models.DateTimeField(verbose_name='last login',auto_now_add=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['fullname']
objects = MyAccountManager()
def __str__(self):
return self.email
def has_perm(self,perm,obj=None):
return self.is_admin
def has_module_perms(self,app_label):
return True
我的注册视图:
def registration_view(request):
form = RegistrationForm(request.POST or None,request.FILES or None)
if request.method == 'POST':
print('get post req')
if form.is_valid():
user = form.save(commit=False)
user.is_active = True
user.save()
if form.cleaned_data['is_instructor'] is True:
instructor_group = Group.objects.get(name='instructor')
instructor_group.user_set.add(user)
return HttpResponseRedirect(reverse_lazy('users:login'))
return render(request,'users/register.html',{'form': form})
这是创建新课程的视图:
class OwnerMixin(object):
def get_queryset(self):
qs = super().get_queryset()
return qs.filter(owner=self.request.user)
class OwnerCourseMixin(OwnerMixin,LoginRequiredMixin,PermissionRequiredMixin):
model = Course
fields = ['subject','title','slug','overview','course_img']
success_url = reverse_lazy('manage_course_list')
class OwnerCourseEditMixin(OwnerCourseMixin,OwnerEditMixin):
template_name = 'courses/manage/course/form.html'
class CourseCreateView(OwnerCourseEditMixin,CreateView):
permission_required = 'courses.add_course'
success_url = reverse_lazy('courses:manage_course_list')
怎么了?
解决方法
之所以会这样,是因为您有覆盖has_perm
方法
def has_perm(self,perm,obj=None):
return self.is_admin
在用户模型中,仅当is_admin
为True时才返回True
删除此方法或正确检查perm
权限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。