예제 #1
0
        internal static bool IsActionAccessible(string actionCode, out BackendAction action)
        {
            using (new QPConnectionScope())
            {
                action = BackendActionRepository.GetByCode(actionCode);
                if (action == null)
                {
                    throw new ApplicationException($"Action is not found: {actionCode}");
                }

                if (QPContext.IsAdmin)
                {
                    return(true);
                }

                var actionType = BackendActionTypeRepository.GetById(action.TypeId);
                if (actionType == null)
                {
                    throw new ApplicationException($"Action Type is not found: {action.TypeId}");
                }

                var userPLevel = GetActionPermissionLevelForUser(action, QPContext.CurrentUserId);
                if (userPLevel == null)
                {
                    return(false);
                }

                return(userPLevel >= actionType.RequiredPermissionLevel);
            }
        }
예제 #2
0
        void MakeRequest(BackendTarget target, BackendAction action, HttpListenerContext context,
                         Dictionary <string, string> parameters, string response, int provider)
        {
            var evArgs = new ProviderRequestEventArgs();

            evArgs.Context    = context;
            evArgs.Parameters = parameters;
            evArgs.Action     = action;
            evArgs.Provider   = provider;

            switch (target)
            {
            case BackendTarget.Playlist:
                evArgs.Response = response;
                PlayListRequest?.Invoke(this, evArgs);
                break;

            case BackendTarget.Epg:
                evArgs.Response = response;
                EPGRequest?.Invoke(this, evArgs);
                break;

            case BackendTarget.Channel:
                evArgs.Response = response;
                ChannelRequest?.Invoke(this, evArgs);
                break;

            case BackendTarget.WebSite:
            case BackendTarget.Unknown:
            default:
                break;
            }
        }
예제 #3
0
        public void MakeResponse(int provider, string response, BackendAction action, Dictionary <string, string> parameters, HttpListenerContext context)
        {
            var evArgs = new ChannelProviderResponseEventArgs();

            evArgs.Provider   = provider;
            evArgs.Action     = action;
            evArgs.Response   = response;
            evArgs.context    = context;
            evArgs.Parameters = parameters;

            ChannelProviderResponse?.Invoke(this, evArgs);
        }
예제 #4
0
        private static int?GetActionPermissionLevelForUser(BackendAction action, int userId)
        {
            using (var scope = new QPConnectionScope())
            {
                var row = Common.GetActionPermissionsForUser(QPContext.EFContext, scope.DbConnection, userId, action.EntityTypeId, action.Id).FirstOrDefault();
                if (row != null && !row.IsNull("PERMISSION_LEVEL"))
                {
                    return(Converter.ToInt32(row.Field <decimal>("PERMISSION_LEVEL")));
                }

                return(null);
            }
        }
예제 #5
0
 public bool IsActionAccessible(string actionCode, out BackendAction action) => SecurityRepository.IsActionAccessible(actionCode, out action);