2010-06-04 3 views
2

내 문제는 내 사이트에 프로젝트를 만들고 다른 사용자의 프로젝트에 액세스 할 수있는 사용자가 있습니다. 각 프로젝트는 사용자에게 서로 다른 권한을 할당 할 수 있습니다.Django 사용자 "프로젝트 별"그룹 지정

그래서, 내가 프로젝트을 할 수 : 사용자가 "요한은"그룹에서 "관리자"이며, 프로젝트 "B"사용자는 "요한은"그룹 "노동자"입니다.

어떻게 그렇게 장고 사용자 인증 모델을 사용할 수 있습니다? 는 SQL 관점에서

보기

은, 내가 뭘하고 싶은 것은 "auth_user_groups"테이블에 대한 기본 키에서 "PROJECT_ID"를 추가 할 수 있습니다.

프로필이 도움이되지 않는다고 생각합니다. 어떤 충고 ?

는 UPDATE : "노동자"와 "매니저는"내 응용 프로그램이 정의하는 권한 그룹 (또는 "역할")의 두 예입니다. 앞으로는 더 많은 것이있을 것입니다. 예 : 나는 아마도 당신이 정말로 그룹에서이 정보가 필요한 경우 등은 ...

답변

0

내가 가장 좋은 방법은 하위 클래스에 필요한 모델을 생각하고 자신의 인증 응용 프로그램을 "보고", "admin"을해야합니다/auth backend 이것!

프로젝트를 그룹과 관련시켜야하는지 알고 싶지 않은 경우 사용자와 1 : 1의 관계가 있고 사용자가 프로젝트에 할당 할 수있는 사용자 프로필을 만들 수도 있습니다. 그런 다음 사용자가 어떤 프로젝트와 관련이 있는지 앱에 체크인하십시오. 내 마음에 오는

세 번째 솔루션은 프로젝트에 하나 개의 외래 키와 모델 또한 당신을 위해 작동 할 수 있습니다 그룹, 하나를 가지고,하지만 아마 좋은 유용성이없는 것입니다!

더러운 방법은 아마도 monkey-patching (add_to_class)을 사용하여 그룹에 외래 키를 추가하는 것이지만, 다른 하강 방법을 찾지 못하고 최후의 수단 인 경우에만이 방법을 사용하는 것이 좋습니다. 첫 번째 선택이 아닙니다!

+0

감사합니다. 나는 누군가가 더 나은 해결책을 가지고 있는지보기 위해 조금 기다릴 것이지만 아마도 당신의 첫 번째 해결책 (서브 클래 싱)을 위해 갈 것입니다 ... 나는 그룹에서 그것이 정말로 "필요"하지 않습니다, 그것은 단지 그 사용자의 권리에 달렸습니다. 프로젝트에. 두 번째 해결책은 Django가 이미 사용하는 auth_group/permission 모델 (userprofilepermission과 같은 테이블 포함)을 복제하는 것입니다. "auth_group"테이블의 기본 키에 다른 키를 추가하는 것입니다 ... 기본 인증 모델을 확장하는 하강 방법이 있기를 바랍니다. 복사/붙여 넣기 이외의 Django에는 제한된 인증 모델이 있습니다. –

0

당신이 당신의 사용자 모델에 그것없이 살 수 그것에게 연결된 사용자 프로파일 모델을 가질 수 있다면, 어떻게 같은 약 : 주석에 대한

from django.contrib.auth.models import User 
from foo.models import Project 

class UserProfile(models.Model): 

    auth_user = models.ForeignKey('User') 
    projects_where_manager = models.ManyToManyField('Project', 
                related_name="managers_for_project") 
    projects_where_worker = models.ManyToManyField('Project', 
                related_name="workers_for_project") 
+0

사실 "근로자"와 "관리자"는 내 사용자가 가질 수있는 권리의 두 가지 예일뿐입니다. 난 정말 "auth_group/permission"모델, 컬럼 대신 테이블에 데이터로 그룹을 정의하고 사용자 싶습니다. –