2010-03-15 2 views
0

나는 익명 사용자가 액세스 할 수있는 사이트 (프론트 오피스)와 액세스가 제한된 하위 사이트 (백 오피스)를 가지고 있습니다. 백 오피스에서 특정 페이지 (예 : /Pages/specificpage.aspx)의 액세스를 특정 그룹의 구성원 인 사용자로만 제한하려고합니다.특정 사용 권한을 정의하는 방법은 무엇입니까?

프로그래밍 방식으로 어떻게 할 수 있습니까?

감사합니다.

답변

2

먼저이 권한 유형에 대한 그룹을 만듭니다. 당신은 "People and Groups"페이지에서 그렇게합니다.
그러면 http :/Pages로 이동하여 페이지 목록으로 이동합니다.
해당 페이지/항목의 드롭 다운 메뉴를 클릭하고 "권한 관리"를 선택하십시오. 동작 메뉴에서 "사용 권한 편집"을 선택하고 확인을 클릭하여 상속을 해제하십시오.
기본 (상속 된) 권한 (사용자/그룹)을 선택 표시하여 제거하고 작업 -s> 사용자 권한 제거를 선택하십시오.
새로 만들기 메뉴에서 "사용자 추가"를 선택하고 그룹 이름을 입력 한 다음 원하는 권한을 선택하고 확인을 클릭하십시오. 여기

그리고 프로그래밍을 수행하는 방법은 다음과 같습니다

using (SPSite site = new SPSite("<YOUR URL>")) 
{ 
    using (SPWeb web = site.OpenWeb()) 
    { 
    // Get the group you want to assign to the item 
    SPGroup group = web.Groups["<YOUR GROUP NAME>"]; 
    SPPrincipal principal = group as SPPrincipal; 

    // Define the role definitions 
    SPRoleDefinitionCollection roleDefinitions = web.RoleDefinitions; 
    SPRoleDefinition[] rolesToApply = new SPRoleDefinition[1] { roleDefinitions["Contribute"] }; 
// Or whatever role definition you want to assign 

    SPRoleAssignment newRoleAssignmentToAdd = new SPRoleAssignment(principal); 
    foreach (SPRoleDefinition roleDefinition in rolesToApply) 
    { 
     if (roleDefinition != null) 
     { 
     newRoleAssignmentToAdd.RoleDefinitionBindings.Add(roleDefinition); 
     } 
    } 

    // Choose your list 
    SPList list = web.Lists["Pages"]; 

    // Query for the item/file/page 
    SPQuery query = new SPQuery(); 
    query.RowLimit = 2000; 
    query.ViewFields = "<FieldRef Name='Title' />"; 
    query.Query = string.Format(@"<OrderBy><FieldRef Name='ID'/></OrderBy> 
            <Where> 
             <Eq> 
              <FieldRef Name='FileLeafRef'/> 
              <Value Type='Text'>{0}</Value> 
             </Eq> 
            </Where>", "<YOUR PAGE NAME>"); 

    // Get the list item 
    SPListItemCollection items = list.GetItems(query); 

    if (items.Count > 0) 
    { 
     SPListItem item = items[0]; 

     // If the item doesn't have unique permissions, set it to have that 
     if (!item.HasUniqueRoleAssignments) 
     { 
     item.BreakRoleInheritance(false); 
     } 

     // Add your role definition 
     item.RoleAssignments.Add(newRoleAssignmentToAdd); 
    } 
    } 
} 
+0

이 답변에 감사드립니다 올바른 방향으로 당신을 도와줍니다 (당신이 SPContext 그나마 그것을 처분 사용하는 경우 나는 FirstUniqueRoleDefinitionWeb 속성에 대한 처리 패턴의 너무 확실하지 않다). 그러나 나는 이것을 프로그래밍 방식으로 달성하기를 원한다는 사실을 잊어 버렸다. –

+0

그래, 몇 가지 샘플 코드를 추가했습니다. –

+0

고맙습니다.이 덧글을 추가 한 후 사용해 보겠습니다.) –

0

는 다음을 수행 할 필요가 실용적으로 사용 권한을 설정합니다. 항목 2)의

1) 브레이크 역할 상속에 대한 현재 사용 권한을 복사됩니다 사실 전달, 당신은 항목에 BreakRoleInheritance 메서드를 호출 항목의 브레이크 역할 상속을 끊으려면 새 역할 할당

추가 아이템에의리스트

item.BreakRoleInheritance(false); 

그런 다음 역할 할당 컬렉션 항목을 가져 와서 새 역할 할당을 추가해야합니다. 역할 할당은 SPPrincipal에 대해 만들어지고 SPRoleDefinition이 바인딩됩니다. 당신이 당신의 사이트 권한에 수행 된 모든 사용자 정의한 내용을 유지하고 SPWeb의 역할 정의 컬렉션을 사용할 수 있도록

SPRoleAssignmentCollection rolesAssignments = item.RoleAssignments; 

SPRoleAssignment userRoleAssignment = new SPRoleAssignment(principal); 
userRoleAssignment.RoleDefinitionBindings.Add(roleDefinition); 

rolesAssignments.Add(userRoleAssignment); 

는 현재 SPWeb의 FirstUniqueRoleDefinitionWeb 속성에 갈 수있는 역할 정의를 가져 오기합니다.

if (web.FirstUniqueRoleDefinitionWeb != null) 
{ 
    using (SPWeb firstUniqueRoleDefinitionWeb = web.FirstUniqueRoleDefinitionWeb) 
    { 
     return firstUniqueRoleDefinitionWeb.RoleDefinitions[roleName]; 
    } 
} 
return web.RoleDefinitions[roleName]; 

희망이

관련 문제