Beispiel #1
0
        /// <summary>
        /// Handles the requirement async.
        /// </summary>
        /// <returns>The requirement async.</returns>
        /// <param name="context">Context.</param>
        /// <param name="requirement">Requirement.</param>
        protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, IdsAuthPermissionHandler requirement)
        {
            var subid             = context.User.Claims.FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Sub).Value;
            var filterContext     = context.Resource as AuthorizationFilterContext;
            var controllerContext = (filterContext.ActionDescriptor as ControllerActionDescriptor);

            int.TryParse(subid, out int userid);
            ValidatePermissionDTO param = new ValidatePermissionDTO {
                UserId     = userid,
                Code       = SystemTag,
                Controller = controllerContext.ControllerName.ToLower(),
                Action     = controllerContext.ActionName.ToLower()
            };
            var db = filterContext.HttpContext.RequestServices.GetService(typeof(PermissionConext)) as PermissionConext;
            //if (context.User.Claims.Any(c => c.Type == "name" && c.Value == "superadmin")) {
            //    context.Succeed(requirement);
            //    return;
            //}
            var isvalidate = await Validate(db, param);

            if (isvalidate)
            {
                context.Succeed(requirement); return;
            }

            HandleBlockedAsync(context, requirement);
        }
Beispiel #2
0
        private async Task <bool> Validate(PermissionConext pcontext, ValidatePermissionDTO input)
        {
            bool haspermission = await(from u in pcontext.User.Where(u => u.Id == input.UserId)
                                       join urm in pcontext.UserRoleMap on u.Id equals urm.UserId
                                       join rmp in pcontext.RolePermissionMap.Where(m => m.Code == input.Code) on urm.RoleId equals rmp.RoleId
                                       join p in pcontext.Permission.Where(per => per.ControllerName == input.Controller && per.ActionName == input.Action) on rmp.PermissionId equals p.Id
                                       select 1).AnyAsync();

            return(haspermission);
        }
Beispiel #3
0
        public async Task <bool> Validate([FromBody] ValidatePermissionDTO input)
        {
            bool isappadmin = await(from u in pcontext.User.Where(u => u.Id == input.UserId)
                                    join urm in pcontext.UserRoleMap on u.Id equals urm.UserId
                                    join ra in pcontext.RoleAppAdmin.Where(m => m.Code == input.Code) on urm.RoleId equals ra.RoleId select 1).AnyAsync();

            if (isappadmin)
            {
                return(true);
            }
            bool haspermission = await(from u in pcontext.User.Where(u => u.Id == input.UserId)
                                       join urm in pcontext.UserRoleMap on u.Id equals urm.UserId
                                       join rmp in pcontext.RolePermissionMap.Where(m => m.Code == input.Code) on urm.RoleId equals rmp.RoleId
                                       join p in pcontext.Permission.Where(per => per.ControllerName == input.Controller && per.ActionName == input.Action) on rmp.PermissionId equals p.Id
                                       select 1).AnyAsync();

            return(haspermission);
        }