私のASP.NETMVCアプリケーションでは、ユーザーが特定のコントローラーにアクセスできるかどうかを確認しようとしています。これは、次のように承認データの注釈によって制限されています。
[Authorize(Roles = "user")]
以下を確認するためにOnAuthorizationをオーバーライドしようとしています:-
- リクエストが認証されている場合(これはうまく機能します)
- ユーザーが要求されたビューへのアクセスを許可されている場合(これは機能しません)
私のユーザーロールは、私が作成したSessionManagerオブジェクトに保存されます-SessionManager.ActiveUser.Roles
これが私が擬似コードの形で持っているものですが、誰かが私がこれを正しくするのを手伝ってくれるなら、私はそれを本当に感謝します。
public class HomeBaseController : Controller
{
protected override void OnAuthorization(AuthorizationContext context)
{
if (context.HttpContext.User.Identity.IsAuthenticated)
{
// these values combined are our roleName
bool isAuthorised = context.HttpContext.User.IsInRole(context.RequestContext.HttpContext.User.Identity.);
if (!context.HttpContext.User.IsInRole(---the roles associated with the requested controller action (e.g. user)---))
{
var url = new UrlHelper(context.RequestContext);
var logonUrl = url.Action("LogOn", "SSO", new { reason = "youAreAuthorisedButNotAllowedToViewThisPage" });
context.Result = new RedirectResult(logonUrl);
return;
}
}
}