Это проект MVC 3. Просто для тестирования у меня естьКак заставить RoleProvider работать?
public class MyRoleProvider : RoleProvider
{
public override string[] GetRolesForUser(string username)
{
return new string[] { "0", "1", "2", "4" };
}
public override bool IsUserInRole(string username, string roleName)
{
bool result = true;
return result;
}
Я зарегистрирую его в web.config. И тогда, если я настрою стандартный SqlMemberShipProvider, что-то вроде следующего приведет к срабатыванию моего GetRolesForUser.
[Authorize(Roles="4")]
public class AdminController : Controller
{ //...
Однако я не хочу использовать стандартный SqlMemberShipProvider. Я определил собственным AuthorizeAttribute следующим образом, просто для проверки:
public class MyAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool result = true;
return result;
return base.AuthorizeCore(httpContext);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
}
}
Теперь, следующий не заставит MyRoleProvider.GetRolesForUser стрелять больше.
[MyAuthorize(Roles="4")]
public class AdminController : Controller
{ //...
выше будет вызывать MyAuthorize.AuthorizeCore и MyAuthorize.OnAuthorization, но не методы в MyRoleProvider. Каковы отношения между MemberShipProvider, RoleProvider и AuthorizedAttribute? Когда эти отношения определены или настроены?
Спасибо.
Я хотел бы удалить исходное сообщение. Я, должно быть, ошибся где-то во время моего тестирования. Я начал все сначала и обнаружил, что MyRoleProvider действительно вызван, даже когда я использую атрибут MyAuthorize. Спасибо всем, кто ответил –