在我正在工作的项目上,我们有一个可由匿名用户访问的站点(前台),以及一个访问受限的子站点(后台)。在后台办公室,我想限制一个特定页面(例如/Pages/specificpage.aspx)的访问权限仅限于某个组成员的用户。
我如何以编程方式执行此操作?
感谢。
答案 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];
希望这能帮助你朝着正确的方向前进