2009-06-29 62 views
2

我的SharePoint页面中有一个文档库,其中有10个文档。如果UserA登录,我希望他只能看到那些文件库中的5个文件。我如何创建一些自定义文档库以使其工作?在SharePoint中创建自定义文档库

我也安装了MOSS。

在此先感谢!

回答

3

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

+0

谢谢拉尔斯,但我将有许多文件在我的图书馆和方式许多用户! – Etienne 2009-06-29 17:10:09

3

编写一个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 
} 
} 
} 
1

如果编码不为你工作,并在每一个文件,你不想设定权限,那么还有第三个选项。我们使用设置了权限的文件夹。

例如

创建一个名为“经理”的文件夹,中断权限,并将权限设置为只有管理员。 创建另一个名为“员工1”的文件夹,中断权限,并为员工和雇主的经理设置贡献权限。

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

通过这种方式,管理人员可以查看管理员文件以及员工的所有文件。用户只能看到他们自己的文件。

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

请注意,在维护所有权限和性能时始终关注如何使用此设计,但我们一直在为750多个用户人群和数千个文档执行类似的操作,至今为止我们一直在为我们正常工作。

相关问题