2009-06-29 41 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多個用戶人羣和數千個文檔執行類似的操作,至今爲止我們一直在爲我們正常工作。

相關問題