自定义授权属性

我正在build立我自己的会员系统,我不想和MS会员提供商做任何事情。 我已经浏览了互联网和StackOverflow,但是我可以find的是MS会员供应商之上构build的会员供应商。

无论如何,我现在几乎已经搞定了所有的东西,但是我想使用一个使用我的会员基础设施的自定义授权属性。 我在网站上检查了这个线程,我正在尝试做类似的事情,但我不确定这是什么我需要的。 到目前为止,这些是我得到的课程:

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; } } 

现在,这是我需要的:

  1. 我的SharweAuthorizeAttribute类是否正确呢?
  2. 我需要能够将未经身份validation的用户redirect到login页面
  3. 我需要基于他们的angular色授权用户(使用我自己的angular色提供者),所以我会做这样的事情:

     [SharweAuthorize(Roles="MyRole")] 

这就是我猜…任何build议都比欢迎:)

更新:好吧,我只是再次阅读该页面,并find解决问题的第二个:

 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); } 

让我知道如果我得到它的权利,请…

是的,你做对了(海事组织是实现一个自定义会员提供更安全,更简单,但它是你的select)

  1. 是的,这是正确的
  2. 你做对了
  3. 您从AuthorizeAttribute基类inheritanceroles属性,并检查用户是否在angular色中的实现。

编辑:多一点angular色的事情

如果你有

 [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; }