我为 Django 1.2+ 找到了 3 个行级权限解决方案
有人可以告诉是否有比其他人更多的推荐,他们的主要区别是什么等?
我将首先说我们没有将这些用于对象级权限 - 我们使用我们自己的自定义方法,我真的希望我们没有。如果您可以完全避免对象级别的权限,那么就这样做,它们很难组织起来。
这就是我评估您提到的 3 个应用程序的方式。
积极发展:
API
顺便说一下,以上是按顺序排列的。
我建议仅在 API 上使用 Guardian,但事实上它仍在开发中,而其他人通常不是这样的,这意味着一个巨大的胜利。
至于 13 年 8 月,django-object-permissions 已被django-permission取代。这3个项目正在积极开发中。
就个人而言,我更喜欢权限或权限,它使用检查权限的方法(运行时),而不是使用数据库来保持权限的 django-guardian(附加在对象创建时,fe)。
- 编辑 -
文档中的示例。
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- 在监护人中无法做到的灵活性。
学生可以属于教室。
监护人:
'attend_classroom'
到学生超过教室对象。'attend_classroom'
学生对课堂对象的权限。'attend_classroom'
权限。权限:
ClassroomPermission.can_attend_classroom()
,将查询学生是否属于教室。ClassroomPermission.can_attend_classroom()
当局将检查逻辑保存在单独的文件中。Guardian 需要通过其余代码附加/分离权限。