Djangoのpermissionを付与するサンプルコード
基本的なmodelに基づくpermissionは自動的に作成される。ということで、permisson自体は作らず、作成されているpermissonを付与するサンプルコードを書く。
permissionを付与するにはUserに直接付与するケースとGroupに付与し、そのGroupに属するUserが間接的にパーミッションをもたせるケースがある。
概要;
user1.user_permissions.set([permission]) group.permissions.set([permission]) user2.groups.set([group])
userにはuser_permissions関連オブジェクトが存在する。manyToMayなのでsetとかaddメソッドを使って、user_permissonsにpermissionをセットする事になる。
# Permissonオブジェクトを作成(migrate時に自動作成されていのでパス-> getで取得) blog_view_permission = Permission.objects.get(name="""Can view blog""") # perisson_userにBlogの読み取りアクセス権を与える perisson_user.user_permissions.set([blog_view_permission])
Groupオブジェクトはpermissions関連オブジェクトが存在する。これはmanyToManyの関係なのでsetやaddメソッドでpermissonオブジェクトをセットする。で、Group自体はUser.groupsが関連オブジェクトなのでこれにもsetやaddでセットする。
https://docs.djangoproject.com/ja/3.1/ref/contrib/auth/#django.contrib.auth.models.User.groups
https://docs.djangoproject.com/ja/3.1/ref/contrib/auth/#group-model
# Groupオブジェクトを作成 blog_view_group = Group.objects.create(name='blog_view_group') # GroupオブジェクトにUserオブジェクトを紐づける group_user = User.objects.get(username=group_user_data['username']) group_user.groups.set([blog_view_group]) # 作成したGroupにPermissonオブジェクトを紐づける blog_view_group.permissions.set([blog_view_permission])