100 lines
4.1 KiB
C#
100 lines
4.1 KiB
C#
using System.Linq;
|
|
using System.Security.Claims;
|
|
using gehGassi.Domain.Users;
|
|
using gehGassi.Permissions;
|
|
|
|
namespace gehGassi.Web.Auth
|
|
{
|
|
/// <summary>
|
|
/// Erweiterungen für ClaimsPrincipal für Abfrage von Permissions
|
|
/// </summary>
|
|
public static class PermissionExtensions
|
|
{
|
|
/// <summary>
|
|
/// True wenn der Benutzer über zumindest eine Permission verfügt. Prüft gegen die Datenbank.
|
|
/// </summary>
|
|
/// <param name="user">ClaimsPrincipal User</param>
|
|
/// <param name="permissions">Gesuchte permissions</param>
|
|
/// <returns>true wenn verfügbar, false sonst</returns>
|
|
public static bool HasPermission(this ApplicationUser user, params Permission[] permissions)
|
|
{
|
|
var permissionClaim = user?.Permissions;
|
|
if (string.IsNullOrWhiteSpace(permissionClaim))
|
|
return false;
|
|
var permissionList = permissions.ToList();
|
|
var permissionsGranted = permissionClaim.UnpackPermissionsFromString();
|
|
foreach (var permission in permissionList)
|
|
{
|
|
if (permissionsGranted.Contains(permission))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// True wenn der Benutzer über alle Permissions verfügt. Prüft gegen die Datenbank.
|
|
/// </summary>
|
|
/// <param name="user">ClaimsPrincipal User</param>
|
|
/// <param name="permissions">Gesuchte permissions</param>
|
|
/// <returns>true wenn verfügbar, false sonst</returns>
|
|
public static bool HasPermissions(this ApplicationUser user, params Permission[] permissions)
|
|
{
|
|
var permissionClaim = user?.Permissions;
|
|
if (string.IsNullOrWhiteSpace(permissionClaim))
|
|
return false;
|
|
var permissionList = permissions.ToList();
|
|
var permissionsGranted = permissionClaim.UnpackPermissionsFromString();
|
|
foreach (var permission in permissionList)
|
|
{
|
|
if (!permissionsGranted.Contains(permission))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// True wenn der Benutzer über zumindest eine Permission verfügt. Prüft gegen Claims.
|
|
/// </summary>
|
|
/// <param name="user">ClaimsPrincipal User</param>
|
|
/// <param name="permissions">Gesuchte permissions</param>
|
|
/// <returns>true wenn verfügbar, false sonst</returns>
|
|
public static bool HasPermission(this ClaimsPrincipal user, params Permission[] permissions)
|
|
{
|
|
var permissionClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.PackedPermissionClaimType);
|
|
if (permissionClaim != null)
|
|
{
|
|
var permissionList = permissions.ToList();
|
|
var permissionsGranted = permissionClaim.Value.UnpackPermissionsFromString();
|
|
foreach (var permission in permissionList)
|
|
{
|
|
if (permissionsGranted.Contains(permission))
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// True wenn der Benutzer über alle Permissions verfügt. Prüft gegen Claims.
|
|
/// </summary>
|
|
/// <param name="user">ClaimsPrincipal User</param>
|
|
/// <param name="permissions">Gesuchte permissions</param>
|
|
/// <returns>true wenn verfügbar, false sonst</returns>
|
|
public static bool HasPermissions(this ClaimsPrincipal user, params Permission[] permissions)
|
|
{
|
|
var permissionClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.PackedPermissionClaimType);
|
|
if (permissionClaim != null)
|
|
{
|
|
var permissionList = permissions.ToList();
|
|
var permissionsGranted = permissionClaim.Value.UnpackPermissionsFromString();
|
|
foreach (var permission in permissionList)
|
|
{
|
|
if (!permissionsGranted.Contains(permission))
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
}
|