Я создаю свою собственную систему членства и не хочу иметь ничего общего с поставщиком MS Membership.Я просматривал Интернет и здесь, на StackOverflow, но все, что я мог найти, это провайдеры членства, построенные поверх провайдера MS Membership.
В любом случае, у меня сейчас почти все подключено, но я быхотел бы использовать собственный атрибут Authorize, который использовал мою инфраструктуру членства.Я проверил эту ветку здесь на сайте, и я пытаюсь сделать что-то подобное, но я не уверен, что это тихо, что мне нужно.Пока это классы, которые у меня есть:
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 правильным с самого начала?
- Мне нужно иметь возможность перенаправлять неаутентифицированных пользователей на страницу входа в систему
Мне нужно авторизовать пользователей на основе их ролей (используя мой собственный поставщик ролей), поэтому я бы сделал что-то вроде:
[SharweAuthorize(Roles="MyRole")]
Вот и я ... Любые предложения приветствуются:)
ОБНОВЛЕНИЕ: Хорошо, я просто снова прочитал эту страницу инашел решение вопроса номер два:
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);
}
Дайте мне знать, если я правильно понял, пожалуйста ...