Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SharePoint中创建自定义文档库_Sharepoint_Sharepoint 2007_Moss_Shared Libraries - Fatal编程技术网

在SharePoint中创建自定义文档库

在SharePoint中创建自定义文档库,sharepoint,sharepoint-2007,moss,shared-libraries,Sharepoint,Sharepoint 2007,Moss,Shared Libraries,我的SharePoint页面中有一个文档库,其中有10个文档 如果用户A登录,我希望他只看到该文档库中的5个文档 如何创建一些自定义文档库以使其正常工作 我安装了MOSS 提前谢谢 您可以对文档库中的每个文档配置不同的权限。只需在每个项目上选择“管理权限”选项,并从文档库级别中断权限继承。请注意,拥有太多具有项目级权限的文档可能会给您带来维护噩梦。另一个选项是创建两个具有不同权限的文档库。编写一个ItemEventReceiver,根据库中的一个字段(即具有不同角色的列)中断权限 为此,我们创建

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

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

如何创建一些自定义文档库以使其正常工作

我安装了MOSS


提前谢谢

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

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

为此,我们创建了一个列表,其中包含与sharepoint组耦合的所有角色

i、 e

管理员->网站所有者(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
}
}
}
public override void ItemUpdated(SPItemEventProperties属性)
{
锁
{
尝试
{
使用(SPSite site=new SPSite(properties.SiteId,
properties.ListItem.ParentList.ParentWeb.Site.SystemAccount.UserToken)
使用(SPWeb=site.OpenWeb(properties.RelativeWebUrl))
{
web.AllowUnsafeUpdates=true;
var item=web.Lists[properties.ListId].GetItemById(properties.ListItemId);
变量角色=项目[“角色”]作为SPFieldLookupValueCollection;
var rolesList=web.Site.RootWeb.Lists[“公司角色”];
var groupsToAdd=新列表();
if(项目HasUniqueRoleAssignments)
{
item.ResetRoleInheritance();
item=item.ParentList.GetItemById(item.ID);
}
if(角色!=null&&roles.Count>0)
{
//迭代角色,查看是否存在关联的组
foreach(角色中的var角色)
{
var roleItem=rolesList.GetItemById(rol.LookupId);
if(roleItem!=null)
{
//这是角色列表中的SPgroup字段
var groups=roleItem[“groups”]作为SPFieldUserValueCollection;
如果(组!=null)
{
groupsToAdd.AddRange(组中的g)
其中g.User==null
选择g);
}
}
}
如果(groupsToAdd.Count>0)
{
项目.BreakRoleInheritance(假);
foreach(groupsToAdd中的var值)
{
var group=web.Groups[value.LookupValue];
var assignment=web.RoleAssignments.GetAssignmentByPrincipal(组);
项目。角色分配。添加(分配);
}
}
}
禁用事件触发();
项。系统更新(假);
enableEventFireing();
}
}
捕获(例外情况除外)
{
//日志错误
}
}
}

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

e、 g

创建一个名为“管理者”的文件夹,断开权限,并仅为管理者设置权限。 创建另一个名为“Employee 1”的文件夹,断开权限,并设置员工和员工经理的贡献权限

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

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

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


请注意,使用此设计始终会考虑到维护所有权限和性能,但我们已经为750多个用户群体和数千个文档做了类似的事情,到目前为止,它对我们来说效果良好。

谢谢Lars,但我将有办法访问我库中的许多文档,也可以访问许多用户!!