2009-06-29 4 views
2

SharePointページにドキュメントライブラリがあり、その中に10個のドキュメントがあります。 UserAがログインしている場合、私は彼にそのドキュメントライブラリ内のその文書のうちの5つのみを見たいと思っています。これを行うためのカスタムドキュメントライブラリを作成するにはどうすればよいですか?SharePointでのカスタムドキュメントライブラリの作成

MOSSもインストールされています。

ありがとうございます!

答えて

3

ドキュメントライブラリ内の各ドキュメントに異なるアクセス許可を構成できます。各アイテムの[権限の管理]オプションを選択して、ドキュメントライブラリレベルから権限の継承を解除してください。アイテムレベルの権限を持つドキュメントが多すぎると、メンテナンスの悪夢が発生することに注意してください。別のオプションは、異なる権限を持つ2つのドキュメントライブラリを作成することです。

+0

ありがとうございます。しかし、私は多くのユーザーに私の図書館や道で多くの文書への道を開いているでしょう! – Etienne

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

コーディングがあなたのために動作しない場合は、あなたではなく、各ファイルのパーミッションを設定していないだろう、そして第三の選択肢があります。アクセス許可が設定されたフォルダを使用します。

「マネージャー」という名前のフォルダーを作成し、アクセス許可を破棄し、マネージャーのみに権限を設定します。 "Employee 1"という名前の別のフォルダを作成し、権限を破棄し、EmployeeとEmployeのマネージャにContribute権限を設定します。

ファイルを適切なフォルダに配置すると、フォルダから権利が継承されます。

このようにして、マネージャはマネージャファイルとその従業員のすべてのファイルを見ることができます。ユーザーは自分のファイルしか見ることができません。

本社、地域1、地域2などで同様のロジックを実行し、各地域ごとに異なるグループを作成し、そのグループをフォルダのアクセス許可に割り当てることができます。

すべての権限とパフォーマンスを維持するためにこのデザインを使用することには常に懸念がありますが、私たちは750人以上のユーザー集団と数千のドキュメントについて同様のことを行ってきました。

関連する問題