49 lines
1.8 KiB
C#
49 lines
1.8 KiB
C#
using PARR.API.Services.Interfaces;
|
||
|
||
namespace PARR.API.RoleProvider
|
||
{
|
||
public class BaseSimpleRoleProvider : ISimpleRoleProvider
|
||
{
|
||
private readonly IServiceProvider serviceProvider;
|
||
|
||
public BaseSimpleRoleProvider(IServiceProvider serviceProvider)
|
||
{
|
||
this.serviceProvider = serviceProvider;
|
||
}
|
||
|
||
public async Task<ICollection<string>> GetUserRolesAsync(string ipClient)
|
||
{
|
||
// Авторизация - проверка на разрешения
|
||
// В данном случае, получаем все разрешения (роли)
|
||
|
||
ICollection<string> defaultResult = new string[0];
|
||
|
||
using (var scope = serviceProvider.CreateScope())
|
||
{
|
||
//var clientService = scope.ServiceProvider.GetRequiredService<IClientService>();
|
||
|
||
//var ipClient = clientService.GetClientIp()?.ToString();
|
||
//if (string.IsNullOrEmpty(ipClient))
|
||
// return await Task.FromResult(defaultResult);
|
||
|
||
var authService = scope.ServiceProvider.GetRequiredService<IAuthService>();
|
||
|
||
// проверяем блокировку пользователя
|
||
var userIsBlocked = await authService.UserIsBlockedAsync(ipClient);
|
||
if (userIsBlocked)
|
||
return await Task.FromResult(defaultResult);
|
||
|
||
// получаем пользователя из кэша или бд
|
||
var user = await authService.GetUserAsync(ipClient);
|
||
if (user == null)
|
||
return await Task.FromResult(defaultResult);
|
||
|
||
|
||
return user.Roles.Select(t => t.Name).ToList();
|
||
}
|
||
|
||
// return await Task.FromResult(defaultResult);
|
||
}
|
||
}
|
||
}
|