【问题标题】:Django. Permissions to model instance?姜戈。模型实例的权限?
【发布时间】:2014-07-11 15:36:23
【问题描述】:

我有下一个模型:

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

【问题讨论】:

    标签: django django-permissions


    【解决方案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:这是未经测试的代码。

    【讨论】:

    猜你喜欢
    • 2017-08-30
    • 2016-11-19
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多