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; } } }