我需要锁定对SharePoint库的访问权限:只有属于与该库关联的所有组的用户才应具有读取权限;其他人不应该被允许阅读。
假设我有一个涉及三个项目的文档库:
12345
13579
24680
我有属于一个或多个项目的用户:
Joe: 12345, 24680
Jane: 13579, 24680
Jim: 24680
Harry: 12345, 13579, 24680
我需要将对此库的访问权限仅限于属于所有项目的用户。也就是说,只有哈利才能进入;其他人应该被拒绝。我们使用以每个项目命名的SharePoint组来表示“所属”关系。
更详细地编辑:
我们计划创建doc lib并通过工作流设置初始安全性。但是,根据在表单中输入的信息,可以在创建doclib之后将更多项目与doclib相关联,并且人们可以通过管理员移入和移出项目组(例如,用于促销,新员工......)
目前,如果表单提交在初始设置后添加了新项目,则管理员可能会在必要时创建新组,并为其分配对doclib的访问权限。最终,我们会在工作流程中执行此操作。
目前,我们正在编写代码来为网站分配初始安全状态:
我们将用户输入的项目列表扫描到表单中,必要时创建新项目组,创建站点和几个doclib,中断角色继承并为我们的组分配对doclib的读访问权。我们为每个项目组添加了一些用户。
此时,这些用户中的任何一个都具有读取权限。我们不知道该怎么做才限制只访问所有组成员的用户。
答案 0 :(得分:3)
你已经对自己造成了很大的困难...... SharePoint也没有AD以这种方式工作,我会回到绘图板,因为这只会引起痛苦;)
我会将组的管理和他们的分配分配给整个SharePoint中的文档库和同步权,就像Koen所提到的那样。 例如您可以管理组成员资格,与用于将其连接到文档库的组分开。然后,您需要一个进程来枚举这些单独的组,并根据您的业务规则将其中的用户分别分配给文档库。充其量是脆弱的。
答案 1 :(得分:1)
您可以将文档库设置为BreakRoleInheritance
,并单独设置项目的权限。
这是一个例子:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite("http://..."))
{
using (SPWeb web = site.OpenWeb())
{
web.AllowUnsafeUpdates = true;
SPRoleType role = SPRoleType.Reader;
SPRoleAssignment assignment =
new SPRoleAssignment(web.Groups["groupname"]);
assignment.RoleDefinitionBindings.Add(
web.RoleDefinitions.GetByType(role));
SPList list = web.Lists["name"];
SPListItemCollection items = list.GetItems(new SPQuery());
foreach (SPListItem item in items)
{
if (!item.HasUniqueRoleAssignments)
item.BreakRoleInheritance(false);
while (item.RoleAssignments.Count != 0) // remove all
item.RoleAssignments.Remove(
item.RoleAssignments.Count - 1);
item.RoleAssignments.Add(assignment);
}
}
}
});
答案 2 :(得分:0)
我能想到实现这一目标的唯一方法是创建一个自定义计时器作业,每天通过删除所有权限来更新文档库,然后在一夜之间再次添加它们。这意味着加入这些项目的人将不得不等待1天才能获得访问权限。您只需创建group1的所有用户的集合,并检查每个用户是否存在于组2,3,......中,以及他们是否不从集合中删除它们。