예제 #1
0
        /// <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);
        }
예제 #2
0
 public ResponseMessage(ManagedConnection context, int id, ControllerMethodMeta method, object?actionResult)
 {
     Id           = id;
     Method       = method;
     MethodResult = actionResult;
     Context      = context;
 }
예제 #3
0
        // 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;
        }
예제 #4
0
 /// <param name="result">Не Null когда True.</param>
 /// <remarks>Не бросает исключения.</remarks>
 internal static bool TryDeserializeRequest(ManagedConnection context, ReadOnlyMemory <byte> content, ControllerMethodMeta method, in HeaderDto header,
예제 #5
0
 // Клиент всегда разрешает серверу вызывать свои методы.
 private protected sealed override bool ActionPermissionCheck(ControllerMethodMeta actionMeta, out IActionResult?permissionError, out ClaimsPrincipal?user)
 {
     user            = null;
     permissionError = null;
     return(true);
 }
예제 #6
0
 public bool TryGetAction(string actionFullName, [MaybeNullWhen(false)] out ControllerMethodMeta value)
 {
     return(_actionsDict.TryGetValue(actionFullName, out value));
 }