/// <summary> /// Проверяет доступность запрашиваемого метода пользователем. /// </summary> /// <exception cref="VRpcBadRequestException"/> private protected sealed override bool ActionPermissionCheck(ControllerMethodMeta actionMeta, [NotNullWhen(false)] out IActionResult?permissionError, out ClaimsPrincipal user) { Debug.Assert(actionMeta != null); // Скопируем пользователя что-бы не мог измениться в пределах запроса. user = _user; // 1. Проверить доступен ли метод пользователю. if (user.Identity.IsAuthenticated) { permissionError = null; return(true); } // 2. Разрешить если весь контроллер помечен как разрешенный для не авторизованных пользователей. if (Attribute.IsDefined(actionMeta.ControllerType, typeof(AllowAnonymousAttribute))) { permissionError = null; return(true); } // 3. Разрешить если метод помечен как разрешенный для не авторизованных пользователей. if (Attribute.IsDefined(actionMeta.TargetMethod, typeof(AllowAnonymousAttribute))) { permissionError = null; return(true); } permissionError = new UnauthorizedResult($"Action '{actionMeta.MethodFullName}' requires user authentication.", StatusCode.Unauthorized); return(false); }
public ResponseMessage(ManagedConnection context, int id, ControllerMethodMeta method, object?actionResult) { Id = id; Method = method; MethodResult = actionResult; Context = context; }
// ctor public RequestContext(ManagedConnection connection, int?id, ControllerMethodMeta method, object[] args, bool isJsonRpc) { Debug.Assert(method != null); Context = connection; Id = id; ControllerMethod = method; Args = args; IsJsonRpc = isJsonRpc; }
/// <param name="result">Не Null когда True.</param> /// <remarks>Не бросает исключения.</remarks> internal static bool TryDeserializeRequest(ManagedConnection context, ReadOnlyMemory <byte> content, ControllerMethodMeta method, in HeaderDto header,
// Клиент всегда разрешает серверу вызывать свои методы. private protected sealed override bool ActionPermissionCheck(ControllerMethodMeta actionMeta, out IActionResult?permissionError, out ClaimsPrincipal?user) { user = null; permissionError = null; return(true); }
public bool TryGetAction(string actionFullName, [MaybeNullWhen(false)] out ControllerMethodMeta value) { return(_actionsDict.TryGetValue(actionFullName, out value)); }