【问题标题】:Creating a custom Document Library in SharePoint在 SharePoint 中创建自定义文档库
【发布时间】:2018-08-14 01:43:45
【问题描述】:

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

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

我怎样才能创建一些自定义文档库以使其工作?

我已经安装了 MOSS。

提前致谢!

【问题讨论】:

    标签: sharepoint sharepoint-2007 moss shared-libraries


    【解决方案1】:

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

    【讨论】:

    • 谢谢拉尔斯,但我将有办法访问我的图书馆中的许多文档和许多用户!
    【解决方案2】:

    编写一个 ItemEventReceiver,根据库中的字段(即持有不同角色的列)打破权限。

    我们通过创建一个包含与共享点组耦合的所有角色的列表来做到这一点。

    管理员 -> 网站所有者 (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
    }
    }
    }
    

    【讨论】:

      【解决方案3】:

      如果编码不适合您,并且您不想为每个文件设置权限,那么还有第三种选择。我们使用设置了权限的文件夹。

      例如

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

      将文件放在适当的文件夹中,它将继承文件夹的权限。

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

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

      请注意,使用这种设计来维护所有权限和性能总是令人担忧,但我们一直在为 750 多个用户群和数千个文档做类似的事情,到目前为止它对我们来说运行良好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-06
        • 2012-04-12
        • 2023-03-18
        • 2010-11-04
        相关资源
        最近更新 更多