2017-02-20 12 views
0

나는 다음과 같은 모델이 있습니다장고 - 가디언 권한 - A의 일대 다 관계에있는 개체에 대한 사용 권한을 설정

프로젝트 :

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 장고 관리자 권한을 설정할 수 있습니다. 그런 다음 프로젝트에 대해 다음과 같이 뷰에서 사용자를 확인/제한 할 수 있습니다.

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 

이제 여기에 내가 갇혀 있습니다. 어떻게 장고 - 관리자의 프로젝트와 관련된 모든 SearchCodes에 대한 권한을 설정합니까? SearchCode에 대한 개체 수준 사용 권한을 설정하고 싶지 않습니다. SearchCode의 모든 인스턴스가됩니다. 대신 관리자로 설정해야합니다.

이 프로젝트와 관련된 모든 SearchCode를 볼 수 있지만 다른 SearchCode는 볼 수 없습니다.

자세한 내용이 필요하면 알려주십시오. 가능하면 제네릭으로 유지하려고 노력했습니다.

고맙습니다 - 도움이나 조언을 주시면 감사하겠습니다.

는 편집 :

나는 장고 - 가디언의 프로젝트 개체 수준 사용 권한을 설정합니다 Admin-Integration 예를 사용했다.

이 시점에서이 프로젝트의 개체 - 권한 페이지에있는 동안이 특정 Project 인스턴스와 관련된 모든 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

감사합니다. 이것은 설정 후 사용 권한을 확인하는 데 매우 도움이됩니다 (+1). 그러나 장고 관리자의 SearchCodes에 대한 사용 권한을 설정하는 방법에 대한 포인터/튜토리얼 등을 찾고 있습니다. 아마 내가이 개념을 사용하고 SearchCode 레벨에서 내 권한을 굴릴 수는 있겠지만 - 나는 관리자가되기를 원합니다. - 사용자를 위해서 그리고 일관성을 위해서 :) – beginAgain