public void OnActionExecuting(ActionExecutingContext context) { var attributes = context.ActionDescriptor.EndpointMetadata.FirstOrDefault(x => x is PermissionsAttribute); if (attributes != null) { if (!context.HttpContext.Request.Headers.ContainsKey("Authorization")) { context.Result = new StatusCodeResult(StatusCodes.Status401Unauthorized); } else { context.HttpContext.Request.Headers.TryGetValue("Authorization", out var values); var token = values.FirstOrDefault(); if (!string.IsNullOrEmpty(token)) { RoleDto userRole = null; roleQuery.Execute(token).Match( Succ: x => userRole = x, Fail: _ => context.Result = new StatusCodeResult(StatusCodes.Status401Unauthorized) ); if (userRole == null) { context.Result = new StatusCodeResult(StatusCodes.Status401Unauthorized); return; } MapPerm[] perms = ((PermissionsAttribute)attributes).Perms; for (var i = 0; i < perms.Length(); i++) { switch (perms[i].ToString()) { case ConfigSystem: { if (userRole.ConfigSystem == 0) { context.Result = new StatusCodeResult(StatusCodes.Status401Unauthorized); return; } break; } case CreateDocument: { if (userRole.CreateDocuments == 0) { context.Result = new StatusCodeResult(StatusCodes.Status401Unauthorized); return; } break; } case DeleteDocument: { if (userRole.DeleteDocuments == 0) { context.Result = new StatusCodeResult(StatusCodes.Status401Unauthorized); return; } break; } } } } else { context.Result = new StatusCodeResult(StatusCodes.Status401Unauthorized); } } } }
public IActionResult Get(long id) => getOneQuery.Execute(id).Match( Succ: Ok, Fail: ex => StatusCode(500, ex));