私は基本的なユーザーのものを理解しています。認証、ログイン、アカウントの作成などを知っていますが、今はグループと権限に取り組みたいと思っています。
djangoグループ/パーミッションのドキュメントはどこにありますか?これはそうではありません:http://docs.djangoproject.com/en/dev/topics/auth/
私は基本的なユーザーのものを理解しています。認証、ログイン、アカウントの作成などを知っていますが、今はグループと権限に取り組みたいと思っています。
djangoグループ/パーミッションのドキュメントはどこにありますか?これはそうではありません:http://docs.djangoproject.com/en/dev/topics/auth/
回答:
最初に尋ねる必要がある質問は、どのようなアクセス許可が必要で、どのような種類かということだと思います。どのような意味で、モデルレベルとオブジェクトレベルのどちらが必要ですか。違いを明確にするために、モデルカーがあるとしましょう。すべての車に権限を付与する場合はモデルレベルが適切ですが、車ごとに権限を付与する場合はオブジェクトレベルが必要です。両方が必要な場合がありますが、これは後で説明するように問題ではありません。
モデルの権限については、Djangoがこれらを処理します...ほとんどの場合。モデルごとに、Djangoは「appname.permissionname_modelname」の形式で権限を作成します。車のモデルで「drivers」というアプリがある場合、1つの権限は「drivers.delete_car」になります。Djangoが自動的に作成する権限は、作成、変更、および削除されます。奇妙な理由で、CRUDからの読み取り権限を含めないことにしたので、自分でこれを行う必要があります。Djangoは、何らかの理由でCRUDの「更新」を「変更」に変更することを決定したことに注意してください。モデルにさらにアクセス許可を追加するには、たとえば読み取りアクセス許可を使用するには、Metaクラスを使用します。
class Car( models.Model ):
# model stuff here
class Meta:
permissions = (
( "read_car", "Can read Car" ),
)
パーミッションはタプルのセットであることに注意してください。タプルアイテムは、上記のパーミッションとそのパーミッションの説明です。permname_modelnameの規則に従う必要はありませんが、私は通常それに従います。
最後に、権限を確認するには、has_permを使用できます。
obj.has_perm( 'drivers.read_car' )
ここで、objはユーザーインスタンスまたはグループインスタンスのいずれかです。このための関数を書く方が簡単だと思います。
def has_model_permissions( entity, model, perms, app ):
for p in perms:
if not entity.has_perm( "%s.%s_%s" % ( app, p, model.__name__ ) ):
return False
return True
entityがアクセス許可をチェックするオブジェクト(GroupまたはUser)、modelがモデルのインスタンス、permsがチェックする文字列としてのアクセス許可のリスト(['read'、 'change']など)、appが文字列としてのアプリケーション名。上記のhas_permと同じチェックを行うには、次のように呼び出します。
result = has_model_permissions( myuser, mycar, ['read'], 'drivers' )
オブジェクトまたは行のアクセス許可を使用する必要がある場合(それらは同じことを意味します)、Djangoはそれ自体では実際には役に立ちません。良い点は、モデルとオブジェクトの両方のアクセス許可を並べて使用できることです。オブジェクトのアクセス許可が必要な場合は、独自に作成するか(1.2以降を使用している場合)、他の誰かが作成したプロジェクトを見つける必要があります。私が気に入っているのは、washingtontimesのdjango-objectpermissionsです。