SharePointの管理者以外のユーザーによるカスタムWebアプリケーションページへのアクセスを防止する
-
05-07-2019 - |
質問
SharePoint(MOSS 2007)ソリューションと統合するカスタムWebアプリケーションがあります。このカスタムWebアプリケーションのページにロールベースのアクセスを追加し、指定されたSharePointグループのユーザーのみ、または特定のロールがアクセスできるようにします。他のユーザーはデフォルトのOOTB Webページに送信され、「このページを表示する権限がありません」というメッセージが表示されます。
これを実装する方法、および各カスタムページでアクセスを制御する方法に関するチュートリアルを教えていただけますか?
これらのページはカスタムWebアプリケーションの一部であり、SharePoint APIまたはインターフェースを介して作成されないことに注意してください。
ありがとう、MagicAndi。
更新
念のため、SharePointの機能を利用してセキュリティトリミングまたはアイテムの権限を拡張し、カスタムWebアプリケーションページへのアクセスを制限できるソリューションを期待しています。ページの読み込み時にユーザーのSPGroupを確認し、必要に応じてリダイレクトするコードを既に持っています。ありがとう。
解決
現在のプロジェクトにも同様の設定がありますが、質問をよりわかりやすくするために少し変更しました。カスタムWebページには次のような基本クラスを使用しています。
public abstract class WebPageBase : Page
{
public SPBasePermissions PagePermissionFlag;
public override void OnInit(EventArgs e)
{
SPWeb web = SPContext.Current.Web;
if(!web.DoesUserHavePermissions(PagePermissionFlag))
{
// build the access denied page
SPUtility.Redirect(SPUtility.AccessDeniedPage + "?Source=" + SPHttpUtility.UrlKeyValueEncode(web.Site.MakeFullUrl(Request.RawUrl)),
SPRedirectFlags.RelativeToLayoutsPage,
HttpContext.Current);
}
}
}
次に、ページ自体で、許可が定義されます:
public class ContentPage : WebPageBase
{
protected void Page_PreInit(Object sender, EventArgs e)
{
PagePermissionFlag = SPBasePermissions.ViewFormPages;
}
}
注:次のものにも設定できます:
<%@Page PagePermissionFlagString="SPBasePermissions.ViewFormPages"%> *
*文字列をWebPageBaseの列挙に変換する必要があります)
参考までに、この余分なビットは上記の実装とは無関係であり、内部での使用方法は次のとおりです。
public static class CurrentUser
{
public static bool IsAdmin
{
get
{
return SPContext.Current.Web.DoesUserHavePermissions(SPBasePermissions.ManageWeb);
}
}
public static bool IsReader
{
get
{
return SPContext.Current.Web.DoesUserHavePermissions(SPBasePermissions.ViewFormPages);
}
}
}
他のヒント
ページにItemLevelセキュリティを実装する必要があります。ページライブラリに移動して、ページプロパティを選択し、アイテムのアクセス許可を言い、そのアクセス許可を解除し、アクセスを許可するユーザーのみを追加します。これを複数のファイルに追加する場合は、それらを個別のフォルダーにグループ化し、それらのフォルダーのみにアクセス許可を適用できます。
そして、彼が見るはずのないページを見ようとすると、SharePointは自動的にhimeにアクセス拒否ページを送信します。
ページにアイテムレベルのアクセス許可を適用すると、SharePOintは自動的にセキュリティトリミングを適用し、自分がアクセスできるページのみが他のユーザーに表示されないようにします。
Sharepointによって公開されているユーザーとグループのWebサービスをご覧ください。カスタムWebアプリはそのメソッドを呼び出して、現在のユーザープロファイルに関する情報を取得できます。
たとえば、UserGroup.GetUserInfo()メソッドは、質問に答えることができるIsSiteAdminフラグを返します。