2013-01-05 2 views
0

내 앱에 제품 및 회사 수업이 있습니다. 이제 저는 특정 회사에 FK가있는 제품을 관리하도록하고 싶습니다. 예 :Django Auth : 모델 기반 카테고리에 대한 권한

회사는 다음과 같습니다 푸와 바 제품은 다음과 같습니다

[email protected]가 사용자의 소유입니다 (바 제품) 애플 (. 푸에 의해 생산, 즉 그것에 FK), 배와 자두 Foo 및 [email protected]은 Bar를 소유 한 사용자입니다. John이 Foo에 제품을 추가하고 제거하고 편집 할 수 있도록 priv를 설정하고 싶습니다. 그러나 Foo와 관련된 제품 만 수정할 수 있습니다.

어떻게하면됩니까?

답변

1

정말 이런 django-guardian (https://github.com/lukaszb/django-guardian.git)을 좋아합니다. Django에 대한 객체 수준의 권한을 제공합니다.

귀하의 구체적인 문제에 접근하는 방법은 다음과 같습니다.

이 저장에 추가하여 회사의 주인이 내가 새로운 회사의 창조에 각 회사의 그룹을 만들 것

class Meta: 
    permissions = [('can_add', 'Add product to company'), etc...] 

다음을 수행 할 수있는 작업을 정의합니다().

def save(): 
    # Create a permission group named %s_group % company_name 
    # assign(permission, group) - add the permissions to this group. 

이 예제에서는 Foo_group 및 Bar_group과이 그룹에 할당 된 해당 개체의 사용 권한을 갖게됩니다.

이제 남은 작업은 다른 회사 그룹의 사용자를 추가/제거하여 해당 개체와 관련된 사용 권한을 부여하는 것입니다.

마지막 구성 요소는 관련 작업에 대한 사용 권한을 확인하는 것입니다. 이는 각 동작에 대한 적절한보기에서 수행 할 수 있습니다 (예 : 추가, 제거 등

권한 검사를 위해 Mixins을 사용하는 것이 정말 좋기 때문에 클래스 기반보기를 선호합니다. Guardian은 기본적으로 PermissionRequiredMixin을 제공하지만보다 복잡한 상황에서는 일반적으로 맞춤 설정이 가능합니다.