Если установлен FormsAuthenticationTicket, почему не работает User.IsInRole(admin)?

В отладчике, если я копаюсь в объекте User, я вижу, что свойство UserData текущего члена, ((System.Web.Security.FormsIdentity)(User.Identity)).Ticket.UserData, имеет в нем «admin».

User.Identity.IsAuthenticated работает, User.IsInRole("admin") возвращает false.

Если «admin» находится в свойстве UserData, не должен ли User.IsInRole («admin») возвращать true?

Обновить

Я установил FormsAuthenticationTicket следующим образом:

public static string CreateEncryptedTicket(string username, string roles, DateTime expireAt, bool isPersistent = true) {
    var ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, expireAt, isPersistent, roles, FormsAuthentication.FormsCookiePath);
    return FormsAuthentication.Encrypt(ticket);
}

затем (где roles — список ролей, разделенных запятыми):

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, MemberService.CreateEncryptedTicket(member.Id, roles, expireDate));
HttpContext.Response.Cookies.Add(cookie);

person Chaddeus    schedule 16.08.2012    source источник
comment
Используете ли вы и настроили поставщика ролей в файле web.config?   -  person balexandre    schedule 16.08.2012
comment
Вообще-то нет... только что проверил. Есть ли способ использовать RoleManager без поставщика SQL? Я использую RavenDb для этого проекта... просто хочу иметь возможность использовать User.IsInRole("admin"), чтобы проверить, находится ли пользователь в роли администратора...   -  person Chaddeus    schedule 16.08.2012
comment
вы можете реализовать свой собственный RoleProvider, проверьте мой ответ, я немного говорю об этом: stackoverflow.com/a/5702000/28004 Вы должны реализовать свои собственные провайдеры, используя свою собственную базу данных... хотя в большинстве случаев я использую SQL, я всегда использую своих собственных провайдеров.   -  person balexandre    schedule 16.08.2012


Ответы (1)


Что вы увидите, если перечислите роли пользователя таким образом?

public ActionResult ShowUserRoles() {
    string[] roles = Roles.GetRolesForUser();
    // Just hover your mouse over roles above since you're debugging...
    return View(roles); // This view probably doesn't exist.
}
person Tom Chantler    schedule 16.08.2012
comment
После добавления <roleManager enabled="true"></roleManager> в Web.Config я получаю Roles | {string[0]} - person Chaddeus; 16.08.2012