Django的。模型实例的权限?

时间:2014-07-11 01:52:14

标签: django django-permissions

我有下一个型号:

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个模型吗?

1 个答案:

答案 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:它是一个未经测试的代码。