Authentication and Authorization セクションに移動し、Permissions を選択します。Permissions がない

2024年6月23日

Djangoの権限は、auth_permission テーブルに格納されていますが、それらを直接管理者サイトから追加することはできません。権限は通常、Djangoの組み込みの manage.py コマンドやマイグレーションを使用してプログラムで追加されます。

以下は、権限を追加する方法です。

  1. カスタム権限の作成:

    Permission モデルを使用して権限を追加します。これは通常、models.py ファイルで行います。

    python
    # models.py
    
    from django.db import models
    from django.contrib.auth.models import Permission, ContentType
    
    class YourModel(models.Model):
        # このモデルのフィールドを定義
    
    # カスタム権限を作成
    content_type = ContentType.objects.get_for_model(YourModel)
    permission = Permission.objects.create(
        codename='can_access_your_feature',
        name='Can Access Your Feature',
        content_type=content_type,
    )
    

    上記の例では、YourModel モデルに関連する can_access_your_feature というカスタム権限を作成しています。

  2. マイグレーションの実行:

    上記の変更をデータベースに反映するために、以下のコマンドを実行します。

    bash
    python manage.py makemigrations
    python manage.py migrate
    

    これにより、auth_permission テーブルが更新され、新しい権限が追加されます。

  3. @user_passes_test デコレータで権限を確認:

    先ほど作成した権限を使用して @user_passes_test デコレータで権限を確認します。

    python
    # views.py
    
    from django.contrib.auth.decorators import user_passes_test
    from django.shortcuts import render
    
    def has_access_your_feature(user):
        # ユーザーが特定の権限を持っているかどうかを確認
        return user.has_perm('your_app.can_access_your_feature')
    
    @user_passes_test(has_access_your_feature)
    def your_protected_view(request):
        # ここに権限が必要な処理を追加
        return render(request, 'protected_view.html')
    

これで、カスタム権限を作成し、それを使用してビューで権限を確認できるようになりました。再度の誤解についてお詫び申し上げます。

未分類

Posted by ぼっち