自定义授权属性
我正在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; } }
现在,这是我需要的:
- 我的SharweAuthorizeAttribute类是否正确呢?
- 我需要能够将未经身份validation的用户redirect到login页面
-
我需要基于他们的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)
- 是的,这是正确的
- 你做对了
- 您从
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; }