Я создаю свою собственную систему членства, и я не хочу иметь ничего общего с поставщиком членства MS. Я просмотрел Интернет и здесь, в StackOverflow, но все, что я мог найти, это поставщики членства, созданные на основе поставщика членства MS.
Во всяком случае, сейчас у меня почти все, но я хотел бы использовать специальный атрибут 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")]
Что я думаю... Любые предложения более чем приветствуются:)
UPDATE: Хорошо, я только что прочитал эту страницу и нашел решение вопроса номер два:
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);
}
Сообщите мне, если я правильно понял, пожалуйста...