在SharePoint中创建自定义文档库

时间:2009-06-29 13:17:37

标签: sharepoint sharepoint-2007 moss shared-libraries

我的SharePoint页面中有一个文档库,其中有10个文档。

如果用户A已登录,我希望他只能在该文档库中看到其中的5个文档。

如何为此创建一些自定义文档库?

我安装了MOSS。

提前致谢!

3 个答案:

答案 0 :(得分:3)

您可以为文档库中的每个文档配置不同的权限。只需在每个项目上选择“管理权限”选项,并从文档库级别中断权限继承。请注意,拥有太多具有项目级别权限的文档可能会为您创建维护噩梦。另一种选择可能是创建两个具有不同权限的文档库。

答案 1 :(得分:3)

编写一个ItemEventReceiver,它根据库中的字段(即包含不同角色的列)中断权限。

我们通过创建一个列表来保存与sharepoint组相关的所有角色。

管理员 - >网站所有者(SPGroup),公司管理员(SPGroup)

经理 - >经理(SPGroup)

然后在我们的内容类型中,我们有一个查找列到此列表。

这是ItemEventReceiver的代码:

public override void ItemUpdated(SPItemEventProperties properties)
{
lock (_lock)
{
try
{
    using (SPSite site = new SPSite(properties.SiteId,
            properties.ListItem.ParentList.ParentWeb.Site.SystemAccount.UserToken))
    using (SPWeb web = site.OpenWeb(properties.RelativeWebUrl))
    {
        web.AllowUnsafeUpdates = true;
        var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);

        var roles = item["Roles"] as SPFieldLookupValueCollection;
        var rolesList = web.Site.RootWeb.Lists["Company Roles"];
        var groupsToAdd = new List<SPFieldUserValue>();

        if (item.HasUniqueRoleAssignments)
        {
            item.ResetRoleInheritance();
            item = item.ParentList.GetItemById(item.ID);
        }

        if (roles != null && roles.Count > 0)
        {
            // Iterate over the roles and see if there is a group associated
            foreach (var role in roles)
            {
                var roleItem = rolesList.GetItemById(rol.LookupId);
                if (roleItem != null)
                {
                    // This is the SPgroup field in the rolesList
                    var groups = roleItem["Groups"] as SPFieldUserValueCollection;
                    if (groups != null)
                    {
                        groupsToAdd.AddRange(from g in groups
                                             where g.User == null
                                             select g);
                    }
                }
            }
            if (groupsToAdd.Count > 0)
            {
                item.BreakRoleInheritance(false);
                foreach (var value in groupsToAdd)
                {
                    var group = web.Groups[value.LookupValue];
                    var assignment = web.RoleAssignments.GetAssignmentByPrincipal(group);
                    item.RoleAssignments.Add(assignment);
                }
            }
        }

        DisableEventFiring();
        item.SystemUpdate(false);
        EnableEventFiring();
    }
}
catch (Exception ex)
{
    //LOG ERROR
}
}
}

答案 2 :(得分:1)

如果编码对您不起作用,并且您不想对每个文件设置权限,那么还有第三个选项。我们使用具有权限的文件夹。

e.g。

创建一个名为“Managers”的文件夹,中断权限,并仅为管理员设置权限。 创建另一个名为“Employee 1”的文件夹,中断权限,并为Employee和Employe的经理设置Contribute权限。

将文件放在相应的文件夹中,它将从文件夹继承权限。

这样,经理可以查看经理文件以及员工的所有文件。用户只能看到自己的文件。

可以为总部,区域1,区域2等执行类似的逻辑...并为每个区域创建不同的组,然后将该组分配给文件夹的权限。

请注意,使用此设计始终关注维护所有权限和性能,但我们一直在为750多个用户群和数千个文档做类似的事情,到目前为止它一直在为我们工作。