Как определить конкретные разрешения? - PullRequest
0 голосов
/ 15 марта 2010

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

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 15 марта 2010

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

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

1) Роль наследования предмета 2) Добавьте новое назначение роли

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

item.BreakRoleInheritance(false);

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

SPRoleAssignmentCollection rolesAssignments = item.RoleAssignments;

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

rolesAssignments.Add(userRoleAssignment);

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...