django-object-permissions Vs django-guardian Vs django-autho



我为 Django 1.2+ 找到了 3 个行级权限解决方案

  • django-object-permissions
  • 姜戈守护者
  • 姜戈权威

有人可以说出是否有比其他推荐的更多,它们的主要区别是什么等?

首先,我将说我们不使用这些对象级权限 - 我们使用自己的自定义方法,我真的希望我们没有。如果您完全可以避免对象级权限,请这样做,组织起来很痛苦。

这就是我评估您提到的 3 个应用程序的方式。

积极发展:

  1. 姜戈卫报(1周前)
  2. django-object-permissions(1年前)
  3. Django-authority(近2年前)

应用程序接口

  1. Django-guardian (保存已定义模型的实例)
  2. django-object-permissions (register permissions)
  3. Django-authority(定义类)

顺便说一下,以上是有序的。

我只推荐 API 上的 guardian,但事实上,它仍在开发中,而其他人通常没有,这意味着一个巨大的胜利。

至于 Aug '13,Django-object-permissions已被Django-permission取代。这3个项目正在积极开发中。

就个人而言,我更喜欢使用权限或权限,它使用检查权限的方法(运行时),而不是使用数据库来保留权限的 django-guardian(例如,在对象创建时附加)。

--编辑--

文档中的示例。

姜戈守护者

joe = User.objects.create(username='joe')
task = Task.objects.create(summary='Some job', content='', reported_by=boss)
joe.has_perm('view_task', task)
>> False
assign_perm('view_task', joe, task)
joe.has_perm('view_task', task)
>> True

分配权限并将其保留在数据库中。

姜戈权威

声明:

class FlatpagePermission(permissions.BasePermission):
    label = 'flatpage_permission'
    checks = ('morning_flatpage_check',)
    def morning_flatpage_check(self, flatpage):
        hour = int(datetime.datetime.now().strftime("%H"))
        if hour >= 8 and hour <= 12 and flatpage.url == '/about/':
            return True
        return False
authority.register(Flatpage, FlatpagePermission)

用法:

def my_view(request):
    check = FlatPagePermission(request.user)
    flatpage_object = Flatpage.objects.get(url='/homepage/')
    if check.morning_flatpage_check(flatpage=flatpage_object):
        print "Yay, you can change *this* flatpage!"

它还包装了标准的 django 权限,但您可以看到上述自定义权限中的灵活性,而 -AFAIK- 您无法在 guardian 中做到这一点。

常见用例

学生可以属于教室。

监护人

  1. 将学生分配到新"课堂"后,将权限'attend_classroom'附加到"学生"对象之上。
  2. 从"课堂"中删除"学生"后,请删除"学生对课堂"对象'attend_classroom'权限。
  3. 访问"课堂"时,请检查'attend_classroom'权限。

权限

  1. 定义自定义权限ClassroomPermission.can_attend_classroom(),这将查询学生是否属于"课堂"。
  2. 访问"课堂"时,请选中ClassroomPermission.can_attend_classroom()

权限将检查逻辑保存在单独的文件中。保护者需要通过其余代码附加/分离权限。

最新更新