2017-02-20 4 views
0

私は、次のモデルがあります:ジャンゴ・ガーディアン権限 - 上対多の関係にあるオブジェクトのためのアクセス許可を設定する

プロジェクト:

class Project(models.Model): 
    project_name = models.CharField(max_length=100, unique=True) 

SearchCodes:から

class SearchCode(models.Model): 
    project = models.ForeignKey(Project, on_delete=models.CASCADE) 
    search_code = models.CharField(max_length=3) 
    search_code_modifier = models.CharField(max_length=1) 

    class Meta: 
    unique_together = ('project', 'search_code', 'search_code_modifier',) 

Django-Guardian docs Django管理者の権限を設定することができます。次に、プロジェクトの場合、次のようなビューでユーザーを確認/制限することができます。

def project_edit(request, pk_project): 

    project = get_object_or_404(Project, pk=pk_project) 
    project_name = project.project_name 

    user = request.user 

    # Check user permission at the object level by passing in this specific project 
    if user.has_perm('myApp.change_project', project): 
     ...do something 

ここで私は立ち往生しています。 Django-Adminのプロジェクトに関連するすべてのSearchCodesに対する権限を設定するにはどうすればよいですか?私はSearchCodeに対してオブジェクトレベルの権限を設定したくありません - それはSearchCodeのすべてのインスタンスにすぎません。むしろ私は管理者に設定する必要があります:

このプロジェクトに関連するすべてのSearchCodeを見ることができますが、他のSearchCodesは表示できません。

もっと具体的にする必要がある場合は教えてください。できるだけジェネリックとして保存しようとしています。

ありがとうございました - ご協力いただきありがとうございます。

EDIT:

私はジャンゴ・ガーディアンでプロジェクト・オブジェクト・レベルの権限を設定するにはAdmin-Integration例を使用していました。

この時点で、私はこのプロジェクトのオブジェクト - 権限ページにいる間、この特定のプロジェクトインスタンスに関連するすべてのSearchCodesのアクセス許可を設定する方法があるはずです。

答えて

1

ジャンゴガーディアンは、オブジェクトレベルの許可アプリケーションです。したがって、権限を持っているオブジェクトに対して許可を割り当て、そのオブジェクトで許可を確認してください。あなたの特定の例では、プロジェクトを介してコードのパーミッションをチェックするためのようなものを書く必要があります(パーミッションキャリーオブジェクト):

def code_edit(request, pk): 

    code = get_object_or_404(SearchCode.objects.select_related('project'), pk=pk) 
    project = code.project 
    project_name = project.project_name 

    user = request.user 

    # Check user permission at the object level by passing in this specific project 
    if user.has_perm('myApp.change_project', project): 
     ...do something 
+0

ありがとうございます。これは、設定された後にパーミッションをチェックするのに非常に役立ちますが、私はDjango-AdminのSearchCodesでパーミッションを設定する方法についてのポインタやチュートリアルなどを探しています。私はおそらく、私はおそらくこの概念を使用し、SearchCodeレベルで自分の権限をロールすることができます - 私はむしろ管理者でそれを行うだろう - ユーザーのために、一貫性:) – beginAgain

関連する問題