SPUser 등록 및 권한 설정하는 방법
SPUser를 등록하는 방법은 사실 간단하다.
SPWeb.SiteUsers.Add("계정ID", "이메일주소", "보여줄 이름", "기타 메모")
위의 방법으로 사용하게 되면, 사용자 목록에 등록이 된다. 그러나 이렇게 등록하는 것으로는 해당 사용자가 사이트 내에서 제대로 활용할 수 없을 뿐더러 로그인 해봐야, 액세스 거부 창이나 팍팍 뜬다.
그러면 그 즈음 되서 권한 부분을 체크해 보게 된다.
게임은 지금 부터다.
그렇다면 이 권한 등록하는 방법들이 어떻게 있을까?
하나는 MOSS 2007에서 제공되는 그룹에 추가하는 방법이 있고, 다른 하나는 한사람 자체에 따로 권한을 주는 방식이다.
1. MOSS 2007에서 제공되는 그룹에 추가하는 방법
보통 그룹은 기본적으로 "사이트이름"+" 구성원", "사이트이름" + " 관리자" 형식으로 생성되어 진다.
그래서 보통 아래와 같은 형태로 짜기도 한다.
SPGroup group = web.Groups["Members"]; SPUser user = web.SiteUsers["KNOIE\\neohind"]; group.AddUser(user);
그런데 그 그룹 이름이라는게 로컬라이즈 된 이름이라서 만일 "테스트 사이트" 라는 이름의 사이트에는 "테스트 사이트 구성원" 이런 식의 이름이 그룹이름이 된다. 객관적으로 좀 너무한 이름이지 않을까 싶다. 예제와 같은 이름이라면 위의 코드가 아래처럼 되어야 할 것이다.
SPGroup group = web.Groups["테스트 사이트 구성원"]; SPUser user = web.SiteUsers["KNOIE\\neohind"]; group.AddUser(user);
좀... 너무 하지 않을까? 왠지 하드 코딩하는 기분을 지울 수 없고, 만일 어디에 포팅된다면.. 왠지 대박이지 않을까?
(저 같이 유지보수나 남아서 X 치우다 보면, 우울해집니다.)
그렇다면 어떻게 하면 좋을까?
이를 위해서 SPWeb에는 아래와 같이 관련 그룹에 대한 개체를 바로 꺼내 쓸 수 있는 부분이 있다
SPWeb.AssociatedOwnderGroup // ( 관리자 ) SPWeb.AssociatedMemberGroup // ( 구성원 ) SPWeb.AssociatedVistorGroup // ( 방문자 )
즉 위의 예를 기준으로 변경해 보면 아래와 같은 코드가 된다.
SPGroup group = web.AssociatedMemberGroup; SPUser user = web.SiteUsers["KNOIE\\neohind"]; group.AddUser(user);
그 외 그룹(디자이너, 계층 구조 관리자)들은 알아서....
여튼 저 그룹에 Users 항목에 SPUser 형태로 더해 주면 된다. 그러면 자동으로 해당 권한을 할당해 줄 수 있다.
2. 개별 계정별 개별로 권한 매기기.
여기서 부터는 조금 복잡하게 돌아간다. 아마도 SPGroup에 특정 권한 쎄우려고 할 떄 사용하곤하는데, 이 또한 개별적으로 처리할 수 있다.
SPUser user = web.SiteUsers["KNOIE\\neohind"]; // 만일 관리자, 구성원, 방문자 단위가 아닌 기능별로 Roledefinition을 만드는 방법을 별도로 더 파악해야 함. // 범위를 넘어가므로 여기서는 Contributor 즉, 구성원으로 권한을 설정. SPRoleDefinition defContribute = web.RoleDefinitions.GetByType(SPRoleType.Contributor); SPRoleAssignment roleContribute = new SPRoleAssignment(user as SPPrincipal); roleContribute.RoleDefinitionBinding.Add(defContribute); Web.RoleAssignments.Add(roleContribute);
위의 순서대로 보면 먼저 SPRoleDefinition을 생성 한다.
그리고 난 뒤 SPRoleAssignment를 생성한다. 여기서 생성할 때는 권한을 설정하려는 대상(보통 SPUser나 SPGroup)을 넣는다.
그리고 SPRoleAssgignment 내에 RoleDefinitionBinding에 앞서 만든 SPRoleDefinition을 추가한다.
맨 마지막으로 만들어진 SPRoleAssignment를 실제 권한을 설정하려는 Web, List, ListItem에 추가한다.