0

特定のユーザーが SharePoint のサイト/サブサイトにプログラムでアクセスできるかどうかを確認する必要があります。

注: ログイン ユーザーは、SharePoint サイトのいくつかのサイトにアクセスできます。そのため、ユーザーがアクセス許可を持っているサイトのみを表示する必要があります。

私が使用した:

   using (SPWeb web = new SPSite(url).OpenWeb())
                {
                    SPWebCollection Sites = web.Webs;

                    foreach (SPWeb website in Sites)
                    {
                        SPUser loginUser = website.CurrentUser;
                        string username = loginUser.Name;
                        if (!website.IsRootWeb)
                        {
                            SPWebCollection subsites = website.Webs;
                            foreach (SPWeb supersubsite in subsites)
                            {

                                SPWebCollection thirdlevelsites = supersubsite.Webs;
                                foreach (SPWeb thirdlevel in thirdlevelsites)
                                {

thirdlevel.Site.CatchAccessDeniedException = false;
                                bool check = thirdlevel.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open);
                                if (check)
                                {
                                }
                                thirdlevel.Site.CatchAccessDeniedException = true;                                   
                                }

                            }
                        }
                    }
                }

しかし、エラーが発生しました

bool check = thirdlevel.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open);

なので :

アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))

4

1 に答える 1

2

発行サイトで作業している場合は、(PortalSiteMapProviderナビゲーションのニーズに応じて、、、、など) に依存する必要があります。これは、セキュリティに関して完全にトリミングされており、最適な方法で完全なツリーをトラバースできるためです。パフォーマンス。CombinedNavSiteMapProviderCurrentNavSiteMapProviderGlobalNavSiteMapProviderWebSiteMapProvider

それ以外の場合は、GetSubwebsForCurrentUser()SPWeb オブジェクトで を使用する必要があります。このメソッドは、現在のユーザーがアクセスできるサブ Web のみを返します。

それが役立つことを願っています。

于 2011-05-26T07:27:51.170 に答える