Реализация CustomRoleProvider и использование роли для авторизации в MVC3 asp.net
Я изучал, как реализовать CustomRoleProvider из нескольких учебных пособий, и мне удалось реализовать 2 основных метода, как показано ниже
public override string[] GetRolesForUser(string userName)
{
string connectionString =
ConfigurationManager.ConnectionStrings["myDb"].ConnectionString;
DataContext context = new DataContext(connectionString);
Table<UserObj> usersTable = context.GetTable<UserObj>();
UserObj userObj = usersTable.SingleOrDefault(u => u.UserName == userName);
string roleId = userObj.UserRoleID;
if (roleId != null)
return roleId.Select(c => c.ToString()).ToArray();
else
return new string[] { };
}
public override bool IsUserInRole(string userName, string roleName)
{
string connectionString =
ConfigurationManager.ConnectionStrings["myDb"].ConnectionString;
DataContext context = new DataContext(connectionString);
Table<UserObj> usersTable = context.GetTable<UserObj>();
UserObj userObj = usersTable.SingleOrDefault(u => u.UserName == userName);
if (userObj != null)
{
string roleId = userObj.UserRoleID;
if (roleId.Equals(roleName))
return true;
}
return false;
}
Затем я добавил [Authorize(Roles = "admin")] в метод индекса контроллера, доступ к которому я хочу получить только у администратора. Когда я пытался получить доступ к странице, кажется, что он выполняет ограничение нормально, например, если я ввел URL:
http://localhost:60353/module
..это перенаправил меня
http://localhost:60353/Account/LogOn?ReturnUrl=%2fmodule
Однако роль, похоже, не была проверена.
Что я здесь не так сделал?
1 ответ
Я также сталкиваюсь с той же проблемой, но я могу вызвать метод CustomProvider:
IsUserInRoles ()
явно, но это кажется правильным, потому что доступность не изменилась.... он всегда перенаправляет только на экран входа в систему.......