私は自分のメンバーシップシステムを構築していますが、MSメンバーシッププロバイダーとは何の関係もありません。私はインターネットとここStackOverflowを見回しましたが、MSメンバーシッププロバイダーの上に構築されたメンバーシッププロバイダーしか見つかりませんでした。
とにかく、今ではほとんどすべてが接続されていますが、メンバーシップインフラストラクチャを利用するカスタムのAuthorize属性を使用したいと思います。私はチェックアウトしました this ここのスレッドで、ここで同様のことを実行しようとしていますが、それが必要なものであるかどうかはわかりません。これまでのところ、これらは私が持っているクラスです:
SessionManager:
public static class SessionManager : ISessionManager
{
public static void RegisterSession(string key, object obj)
{
System.Web.HttpContext.Current.Session[key] = obj;
}
public static void FreeSession(string key)
{
System.Web.HttpContext.Current.Session[key] = null;
}
public static bool CheckSession(string key)
{
if (System.Web.HttpContext.Current.Session[key] != null)
return true;
else
return false;
}
public static object ReturnSessionObject(string key)
{
if (CheckSession(key))
return System.Web.HttpContext.Current.Session[key];
else
return null;
}
}
SharweAuthorizeAttribute:(それが実際にやるべきことかどうかはわかりません)
public class SharweAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (SessionManager.CheckSession(SessionKeys.User) == true)
return true;
else
return false;
}
}
今ここに私が必要なものがあります:
(自分のロールプロバイダーを使用して)ロールに基づいてユーザーを承認する必要があるので、次のようにします。
[SharweAuthorize(Roles="MyRole")]
それだと思います...どんな提案でも大歓迎です:)
UPDATE:Okもう一度そのページを読んだところ、質問2の解決策が見つかりました。
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (SessionManager.CheckSession(SessionKeys.User) == false)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "ActionName" },
{ "controller", "ControllerName" }
});
}
else
base.HandleUnauthorizedRequest(filterContext);
}
よろしければ教えてください...
はい、あなたはそれを正しく理解しました(IMOはカスタムメンバーシッププロバイダーを実装する方がより安全で簡単ですが、それはあなたの選択です)
roles
プロパティをAuthorizeAttribute
基本クラスから継承し、実装に、ユーザーがロールに属しているかどうかをチェックインします。編集:役割についてもう少し
あなたが持っている場合
[SharweAuthorize(Roles="MyRole")]
次に、AuthorizeCoreメソッドのRolesプロパティを確認できます。
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (SessionManager.CheckSession(SessionKeys.User) == true) {
if (SessionManager.CheckUserIsInRole( Roles )) // where Roles == "MyRole"
return true;
}
return false;
}