FormsAuthenticationTicket
konstruktor (jeden z wielu parametrów) posiada userData
parametr, który zaczyna się łańcuch. To tutaj możesz dodawać swoje role, oddzielone przez jakąś postać, taką jak fajka (|) lub hash. Sposób, w jaki planujesz skorzystać, zależy od Ciebie. To, co normalnie robisz, to zarejestrować zdarzenie AuthenticateRequest
. Tak, można utworzyć bilet ten był następujący:
private void CreateTicket()
{
var ticket = new FormsAuthenticationTicket(
version: 1,
name: UserName,
issueDate: DateTime.Now,
expiration: DateTime.Now.AddSeconds(httpContext.Session.Timeout),
isPersistent: false,
userData: String.Join("|", arrayOfRoles));
var encryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
httpContext.Response.Cookies.Add(cookie);
}
Potem w global.asax
byś zrobił coś takiego:
public override void Init()
{
base.AuthenticateRequest += OnAuthenticateRequest;
}
private void OnAuthenticateRequest(object sender, EventArgs eventArgs)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
var decodedTicket = FormsAuthentication.Decrypt(cookie.Value);
var roles = decodedTicket.UserData.Split(new[] {"|"}, StringSplitOptions.RemoveEmptyEntries);
var principal = new GenericPrincipal(HttpContext.Current.User.Identity, roles);
HttpContext.Current.User = principal;
}
}
teraz masz role w obiekcie IPrincipal (HttpContext.Current.User
) i kiedy frazę HttpContext.Current.User.IsUserInRole("RoleName")
otrzymasz prawdę lub fałsz. W ten sposób powinieneś być w stanie uniknąć używania dostawcy Roles
.
AKTUALIZACJA: Lepsze zdarzenie, z którym należy nawiązać połączenie, aby móc odtworzyć odtwarzanie Główny użytkownik to Application_AuthenticateRequest
zamiast BeginRequest
. Zaktualizowałem kod, aby to odzwierciedlić.
Jakiego mechanizmu używasz teraz do pracy z rolami? –
@HuseinRoncevic Na mojej tabeli bazy danych mam UserName, hasło i rolę dla użytkownika. Chcę przekazać Rola pobraną z tabeli bazy danych do biletu Uwierzytelniania – chamara
Nie jestem pewien, czy działa w ten sposób. Umieszczasz tylko nazwę użytkownika w pliku cookie auth, a następnie dla każdego przychodzącego żądania odczytujesz nazwę użytkownika z pliku cookie auth i ładujesz inne dane z bazy danych. Można to zrobić w "ActionFilter". – Suhas