2010-03-15 4 views
0

в проекте, над которым я работаю, у нас есть сайт (фронт-офис), доступный анонимным пользователям, и дочерний сайт (бэк-офис), доступ к которому ограничен. В бэк-офисе я хочу ограничить доступ к одной конкретной странице (например, /Pages/specificpage.aspx) только тем пользователям, которые являются членами определенной группы.Как определить конкретные разрешения?

Как я могу сделать это программно?

Спасибо.

ответ

2

Сначала вы создаете группу для этого типа разрешения. Вы делаете это на странице «Люди и группы».
Затем перейдите в свой список страниц, перейдя по ссылке http:/Pages.
Нажмите на раскрывающееся меню на рассматриваемой странице/элементе и выберите «Управление разрешениями». В меню «Действия» выберите «Изменить разрешения» и нажмите «ОК», чтобы разбить наследование.
Удалите права по умолчанию (унаследованные) (пользователь/группы), поместив в них галочку и выберите Action-s> Remove User Permissions.
В меню «Новый» выберите «Добавить пользователей», введите имя своей группы, выберите нужные разрешения и нажмите «ОК».

А вот как это сделать программно:

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

Спасибо за ваш ответ. Но я забыл упомянуть, что хочу добиться этого программно. –

+0

Хорошо, я добавил несколько примеров кода. –

+0

Большое спасибо, я попробую это после добавления этого комментария;) –

0

Чтобы установить разрешения прагматично вам нужно сделать следующее.

1) Перерыв Роль Наследование пункта 2) Добавить новое назначение роли

Чтобы разорвать перерыв Роль Наследование элемента вызывается метод BreakRoleInheritance по этому вопросу, передавая истинный скопирует текущие разрешения для список к элементу.

item.BreakRoleInheritance(false); 

Затем вам необходимо получить сборку Назначения ролей элементов и добавить к ней новое назначение роли. Назначение роли создается для SPPrincipal и связано с SPRoleDefinition.

SPRoleAssignmentCollection rolesAssignments = item.RoleAssignments; 

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

rolesAssignments.Add(userRoleAssignment); 

Чтобы принести определение роли вы можете перейти к свойству FirstUniqueRoleDefinitionWeb текущего SPWeb, так что вы держите любые настройки, которые были сделаны для ваших сайтов разрешений, а затем использовать роль в SPWeb в Определении коллекции. (Я не слишком уверен, картины для захоронения собственности FirstUniqueRoleDefinitionWeb, если вы используете SPContext Dont выбрасывайте его)

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

Надеется, что это поможет вам в правильном направлении

Смежные вопросы