/// <summary> /// Проверяет доступность запрашиваемого метода пользователем. /// </summary> /// <exception cref="VRpcBadRequestException"/> private protected sealed override bool ActionPermissionCheck(ControllerActionMeta actionMeta, [NotNullWhen(false)] out IActionResult?permissionError, out ClaimsPrincipal user) { // Скопируем пользователя что-бы не мог измениться в пределах запроса. 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.ActionFullName}' requires user authentication.", StatusCode.Unauthorized); return(false); }
public void Dispose() { ControllerActionMeta.DisposeArgs(Args); }
public RequestContext(int?uid, ControllerActionMeta controllerActionMeta, object[] args) { Uid = uid; ControllerActionMeta = controllerActionMeta; Args = args; }
public ResponseMessage(int uid, ControllerActionMeta actionMeta, object?actionResult) { ActionMeta = actionMeta; Uid = uid; ActionResult = actionResult; }
/// <param name="result">Не Null когда True.</param> /// <remarks>Не бросает исключения.</remarks> public static bool TryDeserializeRequest(ReadOnlyMemory <byte> content, ControllerActionMeta action, in HeaderDto header,
public bool TryGetAction(string actionFullName, [MaybeNullWhen(false)] out ControllerActionMeta value) { return(_actionsDict.TryGetValue(actionFullName, out value)); }
// Клиент всегда разрешает серверу вызывать свои методы. private protected sealed override bool ActionPermissionCheck(ControllerActionMeta actionMeta, out IActionResult?permissionError, out ClaimsPrincipal?user) { user = null; permissionError = null; return(true); }