diadia

興味があることをやってみる。自分のメモを残しておきます。

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をセットする事になる。

https://docs.djangoproject.com/ja/3.1/ref/contrib/auth/#django.contrib.auth.models.User.user_permissions


# 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])