0

我需要锁定对 SharePoint 库的访问权限:只有属于与该库关联的所有组的用户才应具有读取权限;不应该允许其他人阅读。

假设我有一个涉及三个项目的文档库:

12345
13579
24680

我有属于一个或多个项目的用户:

Joe:   12345, 24680
Jane:  13579, 24680
Jim:   24680
Harry: 12345, 13579, 24680

我需要将对该库的访问限制为仅属于所有项目的用户。即,只有 Harry 可以访问;其他的应该被拒绝。我们将使用以每个项目命名的 SharePoint 组来表示“属于”关系。

编辑更详细:

我们计划创建文档库并通过工作流设置初始安全性。但是,根据在表单中输入的信息,在创建 doclib 后,可能会有更多项目与它相关联,并且管理员可以将人员移入和移出项目组(例如,用于晋升、新员工......)

目前,如果表单提交在初始设置后添加了一个新项目,管理员可能会在必要时创建一个新组,并为其分配对 doclib 的访问权限。最终,我们将在工作流程中执行此操作。

目前,我们正在编写代码来为站点分配初始安全状态:

我们将用户输入的项目列表扫描到表单中,必要时创建新的项目组,创建站点和几个 doclib,中断角色继承并分配我们的组对 doclib 的读取权限。我们向每个项目组添加一些用户。

此时,这些用户中的任何一个都具有读取权限。我们不知道如何将访问权限限制在所有组的成员中。

4

3 回答 3

3

你让自己很难受。SharePoint 和 AD 都是这样工作的,我会回到绘图板上,因为这只会造成痛苦;)

我会像 Koen 提到的那样,将组的管理及其对文档库的分配和整个 SharePoint 的同步权限解耦。例如,您管理与用于将它们连接到文档库的组分开的组成员身份。然后,您需要一个流程来枚举这些单独的组,并根据您的业务规则将其中的用户单独分配给文档库。最好是脆的。

于 2009-11-13T11:25:31.327 回答
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);
            }
        }
    }
});
于 2009-11-13T01:34:29.257 回答
0

我能想到的唯一方法是创建一个自定义计时器作业,通过删除所有权限每天更新您的文档库,然后在一夜之间再次添加它们。这意味着加入这些项目的人必须等待 1 天才能获得访问权限。您只需创建一个包含 group1 的所有用户的集合,并检查每个用户是否存在于组 2、3、...中,以及他们是否没有将它们从集合中删除。

于 2009-11-13T09:19:31.463 回答