Hello, I had a method to control access to menus, based on permissions. But nothing has stopped working and I get the error: "Can not bind at runtime to a null reference"
I do not know what's been changed for this to happen.
Here is the code where I make the comparison:
In my model I have an ENUM, with possible profiles:
public enum Perfil
{
/// <summary>
/// Permissão para Envio, Listagem e Visualização dos arquivos.
/// </summary>
FUNCIONARIO,
/// <summary>
/// Permissão para Envio, Listagem, Visualização, Análise e Sincronização dos arquivos.
/// </summary>
SERVIDOR,
/// <summary>
/// Todas as permissões, inclusive inclusão de novos usuários para acesso ao sistema.
/// </summary>
ADMINISTRADOR
}
And in the model I have an attribute with the profile of each user:
[Display(Name = "Perfil")]
public string sPerfil { get; set; }
In my authentication class, I have the following code, to see whether or not the user is allowed:
public class CustomAutenticacaoAttribute : AuthorizeAttribute
{
[Inject]
public IAutenticacaoProvider autenticacaoProvider { get; set; }
private string msgErro;
private string[] perfilComPermissao;
public CustomAutenticacaoAttribute(Perfil[] perfil)
{
perfilComPermissao = new string[perfil.Length];
for (int x = 0; x < perfil.Length; x++)
{
perfilComPermissao.SetValue(perfil[x].ToString(), x);
}
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (!autenticacaoProvider.Autenticado)
{
msgErro = "Você precisa estar autenticado para acessar essa página";
return false;
}
if (perfilComPermissao.Length > 0 && !perfilComPermissao.Contains<string>(autenticacaoProvider.UsuarioAutenticado.Perfil))
{
msgErro = "Você não tem permissão para acessar essa página com suas credenciais.";
return false;
}
return true;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
filterContext.Controller.TempData["Mensagem"] = msgErro;
}
}
}
And in the view I just make the following marking:
@if (ViewBag.UsuarioAutenticado.Perfil.Equals(PortalRH.DomainModel.Entities.Perfil.FUNCIONARIO.ToString())
|| (ViewBag.UsuarioAutenticado.Perfil.Equals(PortalRH.DomainModel.Entities.Perfil.ADMINISTRADOR.ToString())))
{
<li>@Html.ActionLink("Todos", "Index", "Requerimento")</li>
}
It was working perfectly, but I made some changes to the code in my controllers, and I do not know what could have caused it. Would anyone know how to help me?