2017-08-16 16 views
1

DjangoとPythonを使って登録ユーザごとに権限を設定する必要があります。私は何かをしたが、それが私の要件を満たしているかどうかを混乱させた。私は以下のコードを説明しています。DjangoとPythonを使用してユーザごとにパーミッションを設定する方法は?

class Control(models.Model): 
    """docstring for Control""" 

    user_id = models.ForeignKey(User) 
    control_reactor = models.IntegerField(default=0) 
    find_reactor = models.IntegerField(default=0) 
    view_reactor = models.IntegerField(default=0) 
    class Meta: 
     """docstring for Meta""" 
     permissions = (
      ("view_reactor", "can view reactor"), 
      ("find_reactor", "can find reactor"), 
      ("controll_reactor", "can controll reactor"), 
     ) 

私は@permission_requiredのようなDjangoのデコレータ機能を使用してこれらの権限にアクセスしています。ここで私はユーザーごとに3つのパーミッションを設定する必要がありますが、このモデルクラスは要件ごとに行っていると混乱しています。

答えて

0

定義されたメタクラスは、あなたのモデルがこれらのアクセス許可のみを持ち、管理可能になるという表現です。

djangoのPermissionクラスを使用してプログラムでアクセス権を作成できます。 django docsから

ユーザオブジェクトには、groupsとuser_permissionsの2つの多対多フィールドがあります。ユーザオブジェクトは、他のDjangoモデルと同じ方法で関連オブジェクトにアクセスできます。

権限モデルには、特定のユーザに設定できるすべての権限が格納されます。作成する権限を追加してユーザーに追加するだけです。

from django.contrib.auth.models import Permission, User 
content_type = ContentType.objects.get_for_model(BlogPost) 
permission = Permission.objects.get(
    codename='change_blogpost', 
    content_type=content_type, 
) 
user.user_permissions.add(permission) 

関連の名前はあなたが直接M2M関係と同じ権限を追加することができuser_permissionsです。上記の例では、できるようにユーザーを作成する際に一般的にあなたが許可を与える:

は今、あなたはあなたが同じ

@permission_required('app_name.code_name') 

EDITを行うことができますデコレータのための今すぐ

user.has_perm('app_name.code_name') # generic example 
user.has_perm('myapp.change_blogpost') 

に権限を確認したいとしますユーザーにサインアップした場所にあなたの意見を入れてください。あなたはすぐに権限を付与したくないなら、あなたはあなたの場合、あなたがいずれかのアクセス許可モデルを使用して、あなたのコードの権限を作成したり、メタクラスを使用することができるため、ユーザ

def grant_permissions(request): 
    user = request.user 
    # then you put the code mentioned above 

に許可を与える別のビューを作ることができます。

データベースを移行して、メタクラスで定義された権限を作成するだけです。移行後、上記のコードを使用してパーミッションモデルを使用してユーザーにパーミッションを与えることを忘れないでください。その後、デコレータでパーミッションを使用できます。

@permission_required('view_reactor') 
+0

あなたは私の権限セットごとに編集することができます。どのファイルでコードの最初の部分を定義し、 'BlogPost'はアプリ名ですか?ここで私は異なるユーザーごとに3つの異なる許可を設定する必要があります。 – satya

+0

@satya編集を参照してください。 BlogPostはアプリ名です。また、Permissionsモデルを使用して明示的に各ユーザーにアクセス許可を与える必要があります。移行後、Permissionオブジェクトを取得し、それを使用してユーザーにアクセス許可を与えます。 –

+0

権限は管理者ページの中に設定され、ログインしているユーザではなく、 'django.contrib.authからのものです。、 ユーザー=からrequest.user CONTENT_TYPE = ContentType.objects.get_for_model(植物) 許可= Permission.objects.get( コードネーム= 'change_plant'、 CONTENT_TYPE = CONTENT_TYPE:モデルは、許可、ユーザー デフgrant_permissions(リクエスト)をインポート ) user.user_permissions.add(許可) '、これはviews.pyのように書く必要があります。 – satya

関連する問題