Bom, finalmente consegui fazer algumas coisinhas aqui.
Bom, eu tinha pensado em usar o IPrincipal, porém acabei não utilizando.
Comecei a utilizar o Iprincipal, porém no decorrer da implementação foi inútil.
Para começar, na autenticação eu utilizei ticket:
Dim stringPermissoes As String = ""
For Each grupo As GrupoUsuario In usuarios(0).Grupos
For Each permissao As Permissao In grupo.Permissoes
stringPermissoes = String.Format("{0}|{1}", stringPermissoes, permissao.Nome)
Next
Next
Dim ticketAutenticacao As New FormsAuthenticationTicket(1, _
usuarios(0).Login, _
Date.Now, _
Date.Now.AddYears(1), _
False, _
stringPermissoes)
Dim ticketEncriptografado As String = FormsAuthentication.Encrypt(ticketAutenticacao)
Dim cookie As HttpCookie = New HttpCookie(FormsAuthentication.FormsCookieName, ticketEncriptografado)
Response.Cookies.Add(cookie)
Eu criei uma classe para filtrar a autorização nas actions.
No site onde eu achei uns materiais, é criado o método Application_AuthenticateRequest no global.asax e dentro desse método é pego o ticket e montado o IIdentity, atribuindo ao context.user.
Eu fiz dessa maneira e funcionou corretamente, porém na tentativa de melhorar a lógica, eu acabei passando o código do método Application_AuthenticateRequest para a classe que filtra as autorizações das actions. Dentra dessa classe, eu achei desnecessário montar o IIdentity para repois utilizar o método IsInRole. Bastava eu acessar o USERDATA do ticket que eu tinha as roles.
Da maneira que eu fiz funcionou sem eu precisar criar o IIdentity, e nem o método no global.asax. O que eu fiz seria uma gambiarra ? Está correto?
Obrigado.