Como eu posso pegar grupo de usuário e verificar se aquela usuário pode fazer parte do grupo para entrar no sistema?
O primeiro passo Ă© colocar na classe Startup.cs do seu projeto: //user context services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
A instância será criada quando for necessário para uso.
O segundo passo Ă© declarar isso na sua classe: A interface IHttpContextAccessor pode te judar a pegar o contexto logado
private IHttpContextAccessor _httpContextAccessor;
private HttpContext _context { get { return _httpContextAccessor.HttpContext; } }
O terceiro passo Ă© colocar ele no construtor da classe:
public IndexModel(ILogger<IndexModel> logger,
IConfiguration configuration,
IHttpContextAccessor httpContextAccessor)
{
_logger = logger;
_configuration = configuration;
_httpContextAccessor = httpContextAccessor;
}
Depois disso, eu posso verificar se existe e qual a identidade do usuário dentro do método Get da classe:
public void OnGet()
{
if (_context != null && _context.User != null)
{
var identity = _context.User.Identity;
if (identity != null && identity.IsAuthenticated)
{
this.UserName = identity.Name;
}
else
{
this.UserName = $"User: {identity.Name}";
}
CheckGroup(identity.Name);
}
}
Para checar o grupo, Ă© necessário verificar do domĂnio que necessita que no caso pode ser o domĂnio da sua empresa. Depois Ă© necessário verificar a identidade e o nome do grupo. No meu caso, eu posso ter um ou vários grupos separados por vĂrgular. E esses grupos estĂŁo colocados no arquivo de configuração do sistema. A tag chama Groups.
public void CheckGroup(string userName)
{
try
{
string[] uids = userName.Split('\\');
var userContext = new PrincipalContext(ContextType.Domain, "drl.com");
var upUser = UserPrincipal.FindByIdentity(userContext, userName);
var userid = uids[1].ToString();
string mgrsgroups = _configuration.GetSection("Groups").Value;
if (mgrsgroups != null && mgrsgroups != "")
{
string[] mgrsgps = mgrsgroups.Split(',');
foreach (var mgrgpname in mgrsgps)
{
if (upUser.IsMemberOf(userContext, IdentityType.SamAccountName, mgrgpname))
{
HttpContext.Session.SetString("UserNameCookie", upUser.DisplayName);
Response.Redirect("Upload");
}
else
{
Response.Redirect("Forbidden");
}
}
}
}
catch(System.Exception ex)
{
//this.UserName = this.UserName + " error: " + ex.Message;
Response.Redirect("Forbidden");
}
}
Se tivermos no mesmo grupo, verificado no método IsMemeberOf, então é gerado uma sessão com o nome do usuário. Caso contrário, é redirecionado para outra página.
Espero ter ajudado, qualquer coisa pode entrar em contato comigo pelo site https://mauriciojunior.net.