Django 1.2+の3つの行レベルの権限ソリューションを見つけました
誰かが他よりも推奨されているものがあるかどうか、彼らの主な違いは何ですか?
まず、オブジェクトレベルのアクセス許可にこれらのいずれも使用しないと言うことから始めます。独自のカスタムメソッドを使用しますが、使用していなかったらよかったのにと思います。オブジェクトレベルのアクセス許可をまったく回避できる場合は、そうしてください。整理するのが面倒です。
これが私があなたが言及した3つのアプリを評価する方法です。
積極的な開発:
API
ちなみに上記は順番です。
純粋にAPIだけで保護者をお勧めしますが、他の人が通常いない場所でまだ開発されているという事実は、大きな勝利を意味します。
2013年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権限をラップしますが、上記のカスタム権限には、保護者ではできない柔軟性があります。
生徒はClassroomに所属できます。
ガーディアン:
'attend_classroom'
_を添付します。'attend_classroom'
_権限を削除します。'attend_classroom'
_権限を確認してください。権限:
ClassroomPermission.can_attend_classroom()
を定義します。これにより、StudentがClassroomに属しているかどうかが照会されます。ClassroomPermission.can_attend_classroom()
を確認してください権限は、チェックロジックを別のファイルに保持します。 Guardianには、残りのコードを通じてアタッチ/デタッチ権限が必要です。