我有下一个型号:
class CategoryLesson(models.Model):
title = models.CharField()
class Lesson(models.Model):
title = models.CharField()
category = models.ForeignKey(CategoryLesson)
class UserRole(models.Model):
rolename = models.CharField()
lessons = models.ForeignKey(CategoryLesson)
group = models.ForeignKey(Group)
class SiteUser(models.Model):
username = models.OneToOneField(User)
roles = models.ManyToManyField(UserRole)
有3个类别,没有限制用户。
我无法理解如何限制访问一些SiteUser到某些CategoryLesson&课程。已经看过django-guardian,并且没有看到这个应用程序和django generic has_perm
之间的一些区别。我真的应该为每个类别创建3个模型吗?
答案 0 :(得分:1)
您必须在GET
请求中设置检查您的用户是否有权访问特定的categorylesson。让我们假设你的网址是这样的:192.168.0.1:8000/categorylessson/?cat_id=1
。 (我在这里使用基于类的视图。)
class CategoryLessonList(TemplateView):
...
def get(self, request, *args, **kwargs):
siteuser= SiteUser.objects.get(username=request.User)
siteuser_roles= siteuser.roles.all()
specific_category= CategoryLesson.objects.get(id= int(request.GET.get('cat_id')))
for role in siteuser_roles:
r_lessons=role.objects.filter(lessons= specific_category)
if len(r_lessons)>0:
return super(CategoryLessonList, self).get(request, *args, **kwargs)
return redirect('/no-access')
PS:它是一个未经测试的代码。