0

我有下一个模型:

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 & Lesson 的访问。has_perm已经看过 django-guardian,并没有看到这个应用程序和 django generic在这种情况下的一些区别。我真的应该为每个类别创建 3 个模型吗?

4

1 回答 1

1

在这里,您必须设置一个签入GET请求,您的用户是否有权访问特定类别的课程。让我们假设您的网址是这样的: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:它是未经测试的代码。

于 2014-07-11T07:36:23.817 回答