DESUSERHAVEPERMISSIONS問題
-
10-12-2019 - |
質問
このコードは、当社のサイトとサブサイトのTreeView(Webパーツ)を作成し、ユーザーがアクセスできない場合でも、管理者アカウントに対して完全に機能していますが、サイトやサブサイトを一覧表示します(彼はそうではない)。任意のグループのメンバー)とそれは想定していません。
私は何をしていますか?
SPSecurity.RunWithElevatedPrivilegesを使用する必要がありますか?
protected override void CreateChildControls()
{
TreeView listeTreeView = new TreeView();
listeTreeView.ID = "farmHierarchyViewer";
listeTreeView.ShowLines = true;
listeTreeView.EnableViewState = true;
this.Controls.Add(listeTreeView);
TreeNode node;
listeTreeView.Nodes.Clear();
SPWebApplication currentWebApplication = SPContext.Current.Site.WebApplication;
SPSiteCollection collSites = currentWebApplication.Sites;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
foreach (SPSite site in collSites)
{
site.CatchAccessDeniedException = false;
// Check if site collection != Mysite Host (54) et Mysite (21) and user access
if (site.RootWeb.WebTemplateId != 54 && site.RootWeb.WebTemplateId != 21
&& site.RootWeb.DoesUserHavePermissions(SPBasePermissions.Open))
{
try
{
node = new TreeNode();
TreeNode siteNode = node;
node = new TreeNode(site.RootWeb.Title, null, null, site.Url, "_self");
listeTreeView.Nodes.Add(node);
TreeNode parentNode = node;
foreach (SPWeb childWeb in site.RootWeb.Webs)
{
try
{
addWebs(childWeb, parentNode);
}
finally
{
childWeb.Dispose();
}
}
site.CatchAccessDeniedException = false;
}
finally
{
site.Dispose();
}
}
}
});
listeTreeView.CollapseAll();
}
void addWebs(SPWeb web, TreeNode parentNode)
{
// Check if site != Blog (9), != Search Center (50) and user access
if (web.WebTemplateId != 50 &&
web.DoesUserHavePermissions(web.CurrentUser.ToString(), SPBasePermissions.Open))
{
TreeNode node;
node = new TreeNode(web.Title, null, null, web.Url, "_self");
parentNode.ChildNodes.Add(node);
parentNode = node;
foreach (SPWeb childWeb in web.Webs)
{
try
{
addWebs(childWeb, parentNode);
}
finally
{
childWeb.Dispose();
}
}
}
}
. 解決
コード内のDESUSERHAVEPERMISIONSは、昇格されたコンテキストをチェックします(したがって、現在のユーザーがアクセスできるかどうかをチェックしませんが、アプリプールアカウントが持つ場合)
このバージョンのメソッドを使用して、spcontext.cururent.web.currentUserのloginnameを関数に渡します。 http://msdn.microsoft.com/en-us/library/ms441848.aspx
so
site.RootWeb.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open)
.
あなたのWebオブジェクトのコースオフコードあなたのコードで少し下に戻る
所属していません sharepoint.stackexchange