0

SharePointライブラリへのアクセスをロックダウンする必要があります。ライブラリに関連付けられているすべてのグループに属するユーザーのみが読み取りアクセス権を持つ必要があります。他の人は読むことを許可されるべきではありません。

3つのプロジェクトに関係するドキュメントライブラリがあるとしましょう。

12345
13579
24680

1つ以上のプロジェクトに属するユーザーがいます:

Joe:   12345, 24680
Jane:  13579, 24680
Jim:   24680
Harry: 12345, 13579, 24680

このライブラリへのアクセスを、すべてのプロジェクトに属するユーザーのみに制限する必要があります。つまり、ハリーだけがアクセスできるはずです。他のものは拒否されるべきです。「所属」関係を表すために、各プロジェクトにちなんで名付けられたSharePointグループを使用します。

より詳細に編集:

doc libを作成し、ワークフローを介して初期セキュリティを設定する予定です。ただし、フォームに入力された情報に基づいて、作成後にdoclibに関連付けられるプロジェクトが増える可能性があり、管理者がプロジェクトグループに出入りすることができます(プロモーション、新入社員など)。

今のところ、フォームの送信によって初期設定後に新しいプロジェクトが追加された場合、管理者は必要に応じて新しいグループを作成し、そのグループにdoclibへのアクセス権を割り当てる可能性があります。最終的には、ワークフローでこれを行います。

現在、サイトの初期セキュリティ状態を割り当てるコードを作成しています。

ユーザーがフォームに入力したプロジェクトのリストをスキャンし、必要に応じて新しいプロジェクトグループを作成し、サイトといくつかのdoclibを作成し、役割の継承を解除して、グループにdoclibへの読み取りアクセス権を割り当てます。各プロジェクトグループに何人かのユーザーを追加します。

この時点で、これらのユーザーはいずれも読み取りアクセス権を持っています。方法がわからないのは、すべてのグループのメンバーであるユーザーのみにアクセスを制限することです。

4

3 に答える 3

3

あなたは自分自身でそれを難し​​くしました..SharePointもADもこのように機能します、これは痛みを引き起こすだけなので、私は設計図に戻ります;)

Koenが述べたように、グループの管理とドキュメントライブラリへのグループの割り当てを切り離し、SharePoint全体で権限を同期します。たとえば、グループメンバーシップを、ドキュメントライブラリへの接続に使用するグループとは別に管理します。次に、これらの個別のグループを列挙し、ビジネスルールに従ってそこにいるユーザーをドキュメントライブラリに個別に割り当てるプロセスが必要です。せいぜいもろい。

于 2009-11-13T11:25:31.327 に答える
1

ドキュメントライブラリをBreakRoleInheritanceアイテムに個別に設定し、権限を設定することができます。

これは例です:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite("http://..."))
    {
        using (SPWeb web = site.OpenWeb())
        {
            web.AllowUnsafeUpdates = true;
            SPRoleType role = SPRoleType.Reader;
            SPRoleAssignment assignment = 
                new SPRoleAssignment(web.Groups["groupname"]);
            assignment.RoleDefinitionBindings.Add(
                web.RoleDefinitions.GetByType(role));

            SPList list = web.Lists["name"];
            SPListItemCollection items = list.GetItems(new SPQuery());
            foreach (SPListItem item in items)
            {
                if (!item.HasUniqueRoleAssignments)
                     item.BreakRoleInheritance(false);

                while (item.RoleAssignments.Count != 0) // remove all
                       item.RoleAssignments.Remove(
                       item.RoleAssignments.Count - 1);

                item.RoleAssignments.Add(assignment);
            }
        }
    }
});
于 2009-11-13T01:34:29.257 に答える
0

これを達成するために私が考えることができる唯一の方法は、すべての権利を削除し、それらを一晩で再度追加することによって、ドキュメントライブラリを毎日更新するカスタムタイマージョブを作成することです。つまり、これらのプロジェクトに参加する人は、アクセスを取得するために1日待つ必要があります。group1のすべてのユーザーのコレクションを作成し、グループ2、3、...に存在するかどうか、およびコレクションから削除しないかどうかを確認します。

于 2009-11-13T09:19:31.463 に答える