using System.Linq;
using System.Security.Claims;
using gehGassi.Domain.Users;
using gehGassi.Permissions;
namespace gehGassi.Web.Auth
{
///
/// Erweiterungen für ClaimsPrincipal für Abfrage von Permissions
///
public static class PermissionExtensions
{
///
/// True wenn der Benutzer über zumindest eine Permission verfügt. Prüft gegen die Datenbank.
///
/// ClaimsPrincipal User
/// Gesuchte permissions
/// true wenn verfügbar, false sonst
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;
}
///
/// True wenn der Benutzer über alle Permissions verfügt. Prüft gegen die Datenbank.
///
/// ClaimsPrincipal User
/// Gesuchte permissions
/// true wenn verfügbar, false sonst
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;
}
///
/// True wenn der Benutzer über zumindest eine Permission verfügt. Prüft gegen Claims.
///
/// ClaimsPrincipal User
/// Gesuchte permissions
/// true wenn verfügbar, false sonst
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;
}
///
/// True wenn der Benutzer über alle Permissions verfügt. Prüft gegen Claims.
///
/// ClaimsPrincipal User
/// Gesuchte permissions
/// true wenn verfügbar, false sonst
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;
}
}
}