至于 13 年 8 月,
django-object-permissions 已被django-permission 取代。
这 3 个项目正在积极开发中。
就个人而言,我更喜欢权限或权限,它使用 methods 来检查权限(运行时),而不是 django-guardian 使用 database 来保持权限(附加在对象创建,fe)。
-- 编辑--
文档中的示例。
django 守护者
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-权威
声明:
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 中无法做到的灵活性。
常见用例
学生可以属于教室。
监护人:
- 当学生被分配到新教室时,将权限
'attend_classroom' 附加到学生超过教室对象。
- 当学生从课堂中移除时,移除
'attend_classroom' 对课堂对象的学生权限。
- 访问“课堂”时,请检查
'attend_classroom' 权限。
权威:
- 定义自定义权限
ClassroomPermission.can_attend_classroom(),查询Student是否属于Classroom。
- 访问课堂时,请检查
ClassroomPermission.can_attend_classroom()
Authority 将检查逻辑保存在单独的文件中。 Guardian 需要通过其余代码附加/分离权限。