/// <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);
        }
示例#2
0
 public void Dispose()
 {
     ControllerActionMeta.DisposeArgs(Args);
 }
示例#3
0
 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));
 }
示例#7
0
 // Клиент всегда разрешает серверу вызывать свои методы.
 private protected sealed override bool ActionPermissionCheck(ControllerActionMeta actionMeta, out IActionResult?permissionError, out ClaimsPrincipal?user)
 {
     user            = null;
     permissionError = null;
     return(true);
 }