mirror of
https://github.com/bitwarden/server.git
synced 2025-06-25 13:18:48 -05:00

* Avoid multiple lookups in dictionaries * Consistency in fallback to empty CollectionIds * Readability at the cost of lines changed * Readability * Changes after running dotnet format
67 lines
1.8 KiB
C#
67 lines
1.8 KiB
C#
using System.Security.Claims;
|
|
using Bit.Admin.Enums;
|
|
using Bit.Admin.Utilities;
|
|
using Bit.Core.Settings;
|
|
|
|
namespace Bit.Admin.Services;
|
|
|
|
public class AccessControlService : IAccessControlService
|
|
{
|
|
private readonly IHttpContextAccessor _httpContextAccessor;
|
|
private readonly IConfiguration _configuration;
|
|
private readonly IGlobalSettings _globalSettings;
|
|
|
|
public AccessControlService(
|
|
IHttpContextAccessor httpContextAccessor,
|
|
IConfiguration configuration,
|
|
IGlobalSettings globalSettings)
|
|
{
|
|
_httpContextAccessor = httpContextAccessor;
|
|
_configuration = configuration;
|
|
_globalSettings = globalSettings;
|
|
}
|
|
|
|
public bool UserHasPermission(Permission permission)
|
|
{
|
|
if (_globalSettings.SelfHosted)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
var userRole = GetUserRoleFromClaim();
|
|
if (string.IsNullOrEmpty(userRole) || !RolePermissionMapping.RolePermissions.TryGetValue(userRole, out var rolePermissions))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return rolePermissions.Contains(permission);
|
|
}
|
|
|
|
public string GetUserRole(string userEmail)
|
|
{
|
|
var roles = _configuration.GetSection("adminSettings:role").GetChildren();
|
|
|
|
if (roles == null || !roles.Any())
|
|
{
|
|
return null;
|
|
}
|
|
|
|
userEmail = userEmail.ToLowerInvariant();
|
|
|
|
var userRole = roles.FirstOrDefault(s => (s.Value != null ? s.Value.ToLowerInvariant().Split(',').Contains(userEmail) : false));
|
|
|
|
if (userRole == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return userRole.Key.ToLowerInvariant();
|
|
}
|
|
|
|
private string GetUserRoleFromClaim()
|
|
{
|
|
return _httpContextAccessor.HttpContext?.User?.Claims?
|
|
.FirstOrDefault(c => c.Type == ClaimTypes.Role)?.Value;
|
|
}
|
|
}
|