如何定义特定权限?

时间:2010-03-15 09:44:42

标签: sharepoint

在我正在工作的项目上,我们有一个可由匿名用户访问的站点(前台),以及一个访问受限的子站点(后台)。在后台办公室,我想限制一个特定页面(例如/Pages/specificpage.aspx)的访问权限仅限于某个组成员的用户。

我如何以编程方式执行此操作?

感谢。

2 个答案:

答案 0 :(得分:2)

首先,为此权限类型创建一个组。您可以从“人员和群组”页面执行此操作 然后,您可以通过浏览到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);
    }
  }
}

答案 1 :(得分:0)

要以实际方式设置权限,您需要执行以下操作。

1)中断角色项目的继承 2)添加新的角色分配

要断开项目的Break Role Inheritance,在项目上调用BreakRoleInheritance方法,传递true会将列表的当前权限复制到项目中。

item.BreakRoleInheritance(false);

然后,您需要获取项目Role Assignments集合并为其添加新的角色分配。角色分配是为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];

希望这能帮助你朝着正确的方向前进