如何设置SharePoint文档库的独占权限?

如何设置SharePoint文档库的独占权限?,sharepoint,sharepoint-2007,permissions,acl,Sharepoint,Sharepoint 2007,Permissions,Acl,我需要锁定对SharePoint库的访问权限:只有属于与库关联的所有组的用户才应该具有读取权限;其他人不应该被允许阅读 假设我有一个文档库,涉及三个项目: 12345 13579 24680 Joe: 12345, 24680 Jane: 13579, 24680 Jim: 24680 Harry: 12345, 13579, 24680 我有属于一个或多个项目的用户: 12345 13579 24680 Joe: 12345, 24680 Jane: 13579, 246

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

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

12345
13579
24680
Joe:   12345, 24680
Jane:  13579, 24680
Jim:   24680
Harry: 12345, 13579, 24680
我有属于一个或多个项目的用户:

12345
13579
24680
Joe:   12345, 24680
Jane:  13579, 24680
Jim:   24680
Harry: 12345, 13579, 24680
我需要将访问此库的权限限制为仅属于所有项目的用户。也就是说,只有Harry可以访问;其他人应该被拒绝。我们将使用以每个项目命名的SharePoint组来表示“归属”关系

编辑了更多细节:

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

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

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

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


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

您可以将文档库设置为,并分别设置对项目的权限

这是一个例子:

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);
            }
        }
    }
});

您可以将文档库设置为,并单独设置项目的权限

这是一个例子:

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);
            }
        }
    }
});

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

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

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

我会像Koen提到的那样,在整个SharePoint中分离组的管理和对文档库的分配,并同步权限。
e、 g.您管理的组成员资格与用于将其连接到文档库的组分开。然后,您需要一个过程来枚举这些单独的组,并根据您的业务规则将其中的用户分别分配到文档库。充其量是脆弱的。

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

我会像Koen提到的那样,在整个SharePoint中分离组的管理和对文档库的分配,并同步权限。
e、 g.您管理的组成员资格与用于将其连接到文档库的组分开。然后,您需要一个过程来枚举这些单独的组,并根据您的业务规则将其中的用户分别分配到文档库。最好是脆弱的。

是的,我们计划打破继承。我在问如何设置权限。我们不能手动操作——我们必须在工作流中的某个特定点以编程方式进行操作。我希望有一种声明式的方法来实现这一点,这样我就可以简单地将用户添加到各个组中,并将项目的DocLib设置为各个组。这基本上适用于OR关系:我们中断继承并将DocLib上的读取权限设置为组1、2或3的成员,如果用户是1、2或3的成员,则系统允许他们进入。我们如何将DocLib上的读取权限设置为组1、2和3的成员?是的,我们计划中断继承。我在问如何设置权限。我们不能手动操作——我们必须在工作流中的某个特定点以编程方式进行操作。我希望有一种声明式的方法来实现这一点,这样我就可以简单地将用户添加到各个组中,并将项目的DocLib设置为各个组。这基本上适用于OR关系:我们中断继承并将DocLib上的读取权限设置为组1、2或3的成员,如果用户是1、2或3的成员,则系统允许他们进入。我们如何将DocLib上的读取权限设置为组1、2和3的成员?我试图写一个详细的响应,但我突然想到这里没有足够的详细信息。doclib项目的附属关系是静态的吗?如果他们改变,他们将如何/何时改变?在库中添加/删除/修改文档时,它们是否会更改?您的问题真的是关于如何编写代码来管理安全组,还是您的问题更多的是关于捕获对库或其文档的任何更改?好问题!我编辑了这篇文章。。。如果你需要更多,请告诉我。我正试图写一个详细的回复,但我突然想到,我认为这里没有足够的细节。doclib项目的附属关系是静态的吗?如果他们改变,他们将如何/何时改变?在库中添加/删除/修改文档时,它们是否会更改?你的问题真的是关于