예제 #1
0
        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);
                    }
                }
            }
        }
예제 #2
0
 public IActionResult Get(long id)
 => getOneQuery.Execute(id).Match(
     Succ: Ok,
     Fail: ex => StatusCode(500, ex));