django-object-permissions Vs django-guardian Vs django-authority
我发现了Django 1.2+的3个行级权限解决方案
- django-object-permissions
- django-guardian
- django-authority
有人可以说是否比别人推荐的有什么,他们的主要区别是什么?
首先,我们说我们不使用这些对象级别的权限-我们使用自己的自定义方法,我真希望我们没有。如果您完全可以避免对象级别的权限,那么这样做就很麻烦。
这就是我评估您提到的3个应用程序的方式。
积极发展:
API
以上顺便说一句。
我只建议仅在API上使用监护人,但事实上它仍在开发中,而其他地方通常并不意味着大赢家。
至于13年8月,
django-object-permissions已被django-permission取代。
这三个项目正在积极开发中。
就个人而言,我更喜欢使用权限检查权限(运行时)的方法的权限或权限,而不是使用数据库保留权限的django-guardian(附加于对象创建,例如)。
-编辑-
文档中的示例。
django-guardian
1 2 3 4 5 6 7 | 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 |
您分配权限并将其保留在数据库中。
django-authority
宣言:
1 2 3 4 5 6 7 8 9 10 11 | 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) |
用法:
1 2 3 4 5 | 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需要其余代码的附加/分离权限。