문제

나는 약 일주일 동안 Django의 세부 사항을 탐구 해 왔으며 내가 보는 것과 같습니다. 그러나 나는 CRUD 인터페이스에 대한 권한의 세밀한 통제와 관련하여 부정성을 겪었다.

제가 쓰고있는 것은 인트라넷 클라이언트 관리 웹 애플입니다. 조직은 약 6 계층이며 계층을 기반으로 클라이언트 그룹에 대한 액세스를 제한해야합니다. 지속적으로 확장. 나는 어떻게 이것을 할 것인지 상당히 좋은 생각을 가지고 있지만, 사전 제작 된 관리자 인터페이스에 잘 통합 할 수 있는지 확실하지 않습니다.

나는 절대적으로 제로 Django 개발을 해냈습니다. 그렇지 않으면 이것이 효과가 있는지 여부에 대해 더 나은 아이디어를 얻었을 것입니다. 생성 된 관리자 인터페이스 가이 프로젝트에 쓸모가 없다면 Django를 사용하지 않을 것입니다. 그러나 내가 말했듯이, 세밀한 사용자 정의 권한에 크게 의존합니다.

Django는 사용자 정의 권한/규칙을 구축하고 관리자 CRUD 인터페이스에 원활하게 통합 할 수 있습니까?

하나의 업데이트 : 관리 앱을 사용하여 CRUD 인터페이스 생성의 회복을 최소화하고 싶습니다. 그렇습니다.

두 번째 업데이트 :

이 프로젝트에 필요한 권한을 설명하고 싶습니다.

클라이언트는 하나 또는 많은 '상점'에 속할 수 있습니다. 풀 타임 직원은 상점에서 고객을 편집 할 수 있어야합니다 (다른 상점에 속해있는 경우에도). 그러나 다른 상점에서 고객을보고/편집 할 수 없어야합니다. 캐주얼은 어떤 상점도 명단에 도달 한 내용에 따라 클라이언트를 볼 수 있어야합니다 (또는 캐주얼이 상점 사용자로 로그인 한 경우 - 가능성이 높습니다).

그들 위의 경영진은 그들이 관리하는 상점의 모든 직원을 볼 수 있어야합니다.

고위 경영진은 모든 직원을 편집하고 자체적으로 권한을 부여 할 수 있어야합니다.

Django 문서를 읽은 후 그룹의 하위 세트에 대한 권한을 설정할 수 없다고 말합니다. 전체 그룹 만. 이 목적을 위해 자신의 권한을 조롱하는 것이 쉽습니까?

도움이 되었습니까?

해결책

업데이트 된 요구 사항을 올바르게 읽으면 Django의 기존 인증 시스템만으로도 충분하지 않다고 생각합니다. 완전한 ACL 시스템이 필요한 것 같습니다.

이 주제는 여러 번 등장했습니다. Django+ACL에서 인터넷 검색을 시도하십시오.

무작위 샘플링 ...

몇 년 전에 여름의 코드 프로젝트가 있었지만 어디에서 왔는지 잘 모르겠습니다. 보다 http://code.djangoproject.com/wiki/genericauthorization

DJngoproject.org에는 흥미로울 수있는 새로운 티켓이 있습니다.

dumpz.org에는 흥미로운 코드 스니핑이 있습니다.

...하지만 문서는 제로입니다.

행운을 빕니다!

다른 팁

Django 권한 시스템은 완전히 규칙입니다. 각 모델에는 기본 권한 세트가 있습니다. 모델에 새로운 권한을 추가 할 수도 있습니다.

각 사용자는 그룹 멤버십뿐만 아니라 일련의 권한 세트가 있습니다. 개별 사용자는 개별 권한을 가질 수 있습니다. 그리고 그들은 그룹 멤버십의 권한을 상속합니다.

귀하의보기 기능 (및 템플릿)은 사용해야 할 수준의 세분성에서 권한이없는 것을 쉽게 확인할 수 있습니다.

그리고 이것이 충분하지 않은 경우 프로필 애드온은 "사용자"를 정의 할 수있는 더 많은 옵션과 해당 기능, 권한, 역할, 책임 등을 제공합니다.

그리고 이것이 충분하지 않으면 자신의 인증 체계를 정의 할 수 있습니다.


중요한 것은 사용자의 실제 하위 집합 인 그룹을 시도하고 정의하지 않는 것입니다. 우연히 정의 된 제목 또는 역할. "그룹의 하위 세트에 대한 권한을 설정"할 필요는 없습니다. 더 작은 그룹이 있어야합니다. 사람들의 서브 세트 주위에 정의 된 그룹.

Django의 기본 권한은 모델 내에서 행 액세스가 아닌 모델 액세스와 관련이 있습니다. 반면에, 귀하의 문제는 클라이언트, 상점, 직원, 관리자의 여러 모델의 행 하위 집합에 관한 것입니다.

이 항목들 사이에 기본적인 FK 세트와 행을 서브 세트하기위한 일부 필터가 필요합니다. 기본 관리 페이지 로이 작업을 수행하는 데 어려움이있을 수 있습니다. 특수 필터를 사용하려면 자체 버전의 관리자가 필요할 수 있습니다.


Django 권한 시스템으로 할 수 없다면 사용 사례를 다시 생각해야합니다. 진지하게.

Django-Rest 인터페이스는 완전히 다른 짐승이며 약간의 관리와 수유가 필요합니다.

ModelAdmin 물체는 가지고 있습니다 has_add_permission, has_change_permission, has_delete_permission 그리고 queryset 로그인 한 사용자가보고 수정할 수있는 내용에 대한 권한을 시행하는 데 사용할 수있는 메소드 -이를 사용하여 모든 모델을 구현하고 등록하려는 모든 권한을 시행하는 서브 클래스를 만들 수 있습니다. admin 서브 클래스를 사용한 응용 프로그램.

그러나 모든 권한 시스템이 어떻게 작동하는지에 달려 있습니다. 세밀한 권한에서 벗어나는 정확한 요구 사항은 무엇입니까? 당신이 무엇을 더 멀리 떨어 뜨릴수록 admin 응용 프로그램은 작업을 수행하도록 설계되었고, 더 많은 작업을 수행 할 수 있지만, 사용자 정의 요구 사항을 구현하는 데 사용할 수있는 많은 후크가 있습니다. 여기에 있습니다 루크 공장의 블로그 게시물 너무 깊이 파고 들지 않고 할 수있는 미세 조정의 예를 제공합니다.

그것은 절대적으로 주변을 기반으로해야합니까? admin 신청? 일반적인 견해 그리고 Modelforms CRUD 구현과 관련된 지루한 비트를 많이 돌볼 수 있습니다. 조심하세요 커스터마이징에 너무 끊어졌습니다 admin - 끊어지면서 시작하는 것은 거의 장고 전통입니다. admin 앱과 할 수있는 것과 할 수없는 일, 처음에는 코드를 다시는 절대 쓸 필요가 없다고 생각합니다.)

Django 1.2에서 행 수준의 권한에 대한 지원이 있습니다. Django-Guardian 다루기가 매우 직관적입니다.

당신은 또한 세분화 된 투과성 monkeypatch를보고 싶을 수도 있습니다.http://code.google.com/p/django-granular-permissions/

Django의 권한 시스템에 행 수준의 권한을 추가합니다.

방금 찾았습니다 http://bitbucket.org/jezdez/django-authority/ , 그것은 유망 해 보인다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top