Ejemplo n.º 1
0
        /// <summary>
        /// 检查授权
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
        {
            var controllerActionDescriptor = (context.ActionDescriptor as ControllerActionDescriptor);

            if (controllerActionDescriptor.MethodInfo.GetCustomAttributes(typeof(AllowAnonymousAttribute), true).Any())
            {
                return;
            }
            var userClaim = context.HttpContext.User.FindFirst(ClaimTypes.Sid);

            if (userClaim == null || userClaim.Value.IsEmpty())
            {
                AuthorizationFailResult(context);
                return;
            }
            var cacheManagerService = CoreAppContext.GetService <ICacheManagerService>();
            var roleIds             = await cacheManagerService.GetOrAdd <List <int> >(String.Format(CoreConst.USERROLES, userClaim.Value), () =>
            {
                return(SystemUserService.Instance.GetSystemUserRole(int.Parse(userClaim.Value)).Select(x => x.RoleId).ToList());
            }, TimeSpan.FromMinutes(30));

            var controllerActionPermissions = await cacheManagerService.GetOrAdd <List <AuthorizationModel> >(String.Format(CoreConst.USERROLEACTIONS, userClaim.Value), () =>
            {
                var controllerActionPermissions = SystemUserService.Instance.GetRolePermissions(roleIds);
                List <AuthorizationModel> authorizationModels = new List <AuthorizationModel>();
                foreach (var item in controllerActionPermissions.Item2)
                {
                    var controller = controllerActionPermissions.Item1.SingleOrDefault(x => x.Id == item.ControllerId);
                    authorizationModels.Add(new AuthorizationModel
                    {
                        Action     = item.Action,
                        Area       = controller.Area,
                        Controller = controller.Controller
                    });
                }
                return(authorizationModels);
            }, TimeSpan.FromMinutes(30));

            var area       = context.RouteData.Values["Area"].ToString();
            var controller = context.RouteData.Values["Controller"].ToString();
            var action     = context.RouteData.Values["Action"].ToString();

            if (!controllerActionPermissions.Any(x => x.Area == area && x.Controller == controller && x.Action == action))
            {
                AuthorizationFailResult(context);
                return;
            }
        }
Ejemplo n.º 2
0
        public IActionResult InitPermissions()
        {
            return(Invoke <IActionResult>(() =>
            {
                var roleClaim = HttpContext.User.FindFirst(ClaimTypes.Role);
                var userClaim = HttpContext.User.FindFirst(ClaimTypes.Sid);
                var cacheManagerService = CoreAppContext.GetService <ICacheManagerService>();
                var roles = cacheManagerService.GetOrAdd <List <Role> >(String.Format(CoreConst.USERROLES, roleClaim.Value), () =>
                {
                    var roleIds = roleClaim.Value.Split(',').ToList();
                    return GetInstance <Role>().GetByCondition(new ExpressionSpecification <Role>(x => roleIds.Contains(x.Id.ToString()))).ToList();
                }, TimeSpan.FromMinutes(30)).Result;

                if (!roles.Any(x => x.IsSystemAdmin))
                {
                    return JsonFail("权限不足!");
                }

                var roleId = roles.Where(x => x.IsSystemAdmin).FirstOrDefault().Id;
                var controllerService = GetInstance <ControllerPermissions>();
                var actionService = GetInstance <ActionPermissions>();
                var controllerRoleService = GetInstance <ControllerRole>();
                var actionRoleServic = GetInstance <ActionRole>();
                var assembly = Assembly.GetExecutingAssembly();

                var controllerTypes = assembly.GetTypes().Where(x => !x.IsAbstract && typeof(Controller).IsAssignableFrom(x));
                if (controllerTypes.Count() > 0)
                {
                    var area = controllerTypes.First().Namespace.Split('.').Last();
                    foreach (Type controllerType in controllerTypes)
                    {
                        string name = string.Empty;
                        var controllerInitializeAttribute = controllerType.GetCustomAttribute(typeof(InitializeAttribute)) as InitializeAttribute;
                        if (controllerInitializeAttribute != null)
                        {
                            name = controllerInitializeAttribute.FunctionName;
                            area = controllerInitializeAttribute.Area;
                        }

                        if (controllerInitializeAttribute == null)
                        {
                            continue;
                        }

                        var controller = controllerType.Name.Replace("Controller", "");
                        var controllerPermissions = controllerService.GetByCondition(new ExpressionSpecification <ControllerPermissions>(x => x.Area == area && x.Controller == controller));
                        int controllerId = 0, actionId = 0;
                        if (controllerInitializeAttribute != null && controllerPermissions.Count == 0)
                        {
                            controllerId = controllerService.Add(new ControllerPermissions
                            {
                                ModuleName = name,
                                CreateTime = DateTime.Now,
                                Controller = controller,
                                ModuleUrl = controllerInitializeAttribute.ModuleUrl,
                                Area = area,
                                Icon = controllerInitializeAttribute.Icon,
                                SortId = controllerInitializeAttribute.SortId,
                                IsShow = controllerInitializeAttribute.IsShow
                            });
                        }

                        if (controllerPermissions.Count > 0)
                        {
                            controllerId = controllerPermissions.First().Id;
                        }

                        var methods = controllerType.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
                        foreach (MethodInfo item in methods)
                        {
                            var actionAttributes = item.GetCustomAttribute(typeof(InitializeAttribute)) as InitializeAttribute;
                            if (actionAttributes != null)
                            {
                                name = actionAttributes.FunctionName;
                            }

                            if (actionAttributes == null)
                            {
                                continue;
                            }

                            var action = item.Name;
                            var actionPermissions = actionService.GetByCondition(new ExpressionSpecification <ActionPermissions>(x => x.Action == action && x.ControllerId == controllerId));
                            if (actionAttributes != null && actionPermissions.Count == 0)
                            {
                                actionId = actionService.Add(new ActionPermissions
                                {
                                    Action = action,
                                    ActionName = name,
                                    CreateTime = DateTime.Now,
                                    Icon = actionAttributes.Icon,
                                    SortId = actionAttributes.SortId,
                                    IsShow = actionAttributes.IsShow,
                                    ControllerId = controllerId
                                });
                            }

                            if (actionPermissions.Count > 0)
                            {
                                actionId = actionPermissions.First().Id;
                            }

                            if (controllerId != 0)
                            {
                                var controllerRoles = controllerRoleService.GetByCondition(new ExpressionSpecification <ControllerRole>(x => x.ControllerId == controllerId && x.RoleId == roleId));
                                if (controllerRoles.Count == 0)
                                {
                                    controllerRoleService.Add(new ControllerRole
                                    {
                                        CreateTime = DateTime.Now,
                                        RoleId = roleId,
                                        SortId = 1,
                                        SystemId = 1,
                                        ControllerId = controllerId,
                                    });
                                }
                            }

                            if (actionId != 0)
                            {
                                var controllerRoles = actionRoleServic.GetByCondition(new ExpressionSpecification <ActionRole>(x => x.ActionId == actionId && x.RoleId == roleId));
                                if (controllerRoles.Count == 0)
                                {
                                    actionRoleServic.Add(new ActionRole
                                    {
                                        CreateTime = DateTime.Now,
                                        RoleId = roleId,
                                        SortId = 1,
                                        SystemId = 1,
                                        ActionId = actionId,
                                        ControllerId = controllerId
                                    });
                                }
                            }
                        }
                    }
                }
                cacheManagerService.Remove(string.Format(CoreConst.USERROLEACTIONS, userClaim.Value));
                return JsonSuccess("初始化成功!");
            }));
        }
Ejemplo n.º 3
0
 /// <summary>
 /// ctor
 /// </summary>
 public BaseController()
 {
     this._mapper     = CoreAppContext.GetService <IMapper>();
     this._logger     = CoreAppContext.GetService <ILogger <BaseController> >();
     this._coreUpload = CoreAppContext.GetService <IOptions <CoreUpload> >().Value;
 }