예제 #1
0
        public AuthStrategyDto NormalAuthStrategy(int employeeId)
        {
            var result      = new AuthStrategyDto();
            var userRoleIds = _relevanceBusiness.Query(p => p.FirstId == employeeId && p.Identifiers == PowerIdentifiers.UserByRole).Select(p => p.SecondId);

            if (userRoleIds.Count() == 0)
            {
                return(result);
            }
            var roleIds = _roleBusiness.Query(p => userRoleIds.Contains(p.Id) && p.Status == NomalStatus.Valid).Select(p => p.Id);

            if (userRoleIds.Count() == 0)
            {
                return(result);
            }

            //先拉取角色对应的模块和元素
            var relevanceIds = _relevanceBusiness.Query(p => roleIds.Contains(p.FirstId));
            var moduleIds    = relevanceIds.Where(p => p.Identifiers == PowerIdentifiers.RoleByModule).Select(p => p.SecondId);

            if (moduleIds.Count() == 0)
            {
                return(result);
            }

            List <KeyValuePair <string, OrderBy> > order = new List <KeyValuePair <string, OrderBy> >()
            {
                new KeyValuePair <string, OrderBy>("Level", OrderBy.Asc),
                new KeyValuePair <string, OrderBy>("DisplayOrder", OrderBy.Asc)
            };
            var modules = _moduleBusiness.Query(p => moduleIds.Contains(p.Id) && p.Status == NomalStatus.Valid, p => p, order);

            result.Modules = modules.Select(p => new PowerModuleDto()
            {
                Id       = p.Id,
                Name     = p.Name,
                Code     = p.Code,
                Level    = p.Level,
                Pid      = p.Pid,
                Url      = p.Url,
                IconName = p.IconName
            }).GenerateTree(p => p.Id, p => p.Pid).ToList();

            //模块元素
            var elementIds = relevanceIds.Where(p => p.Identifiers == PowerIdentifiers.RoleByElement).Select(p => p.SecondId);
            var elements   = _elementBusiness.Query(p => elementIds.Contains(p.Id) && p.IsSystem == 0 && p.Status == NomalStatus.Valid);

            result.Elements = modules.Select(p => new PowerModuleElementDto()
            {
                Id       = p.Id,
                Code     = p.Code,
                Name     = p.Name,
                Elements = elements.Where(p1 => p1.ModuleId == p.Id).OrderBy(p1 => p1.DisplayOrder).ToList()
            }).ToList();

            return(result);
        }
예제 #2
0
        public object QueryModulesByTree([FromForm] ModulesDisplayMode mode)
        {
            var lsMoudle = _moduleBusiness.Query(p => p.Status == NomalStatus.Valid, p => new
            {
                p.Id,
                p.Name,
                p.Pid,
                p.DisplayOrder
            });

            switch (mode)
            {
            case ModulesDisplayMode.AddAll:
                lsMoudle.Add(new { Id = 0, Name = "全部", Pid = 0, DisplayOrder = -99999 });
                break;

            case ModulesDisplayMode.AddRoot:
                lsMoudle.Add(new { Id = 0, Name = "根节点", Pid = 0, DisplayOrder = -99999 });
                break;
            }

            return(lsMoudle.OrderBy(p => p.DisplayOrder));
        }
예제 #3
0
        public Result AddOrEditRole(PowerRole model)
        {
            var result = CheckRole(model);

            if (!result.Succeed)
            {
                return(result);
            }
            model.Status = NomalStatus.Valid;

            try
            {
                using (TransactionScope ts = new TransactionScope())
                {
                    //新增
                    if (model.Id <= 0)
                    {
                        _roleBusiness.Add(model);
                    }

                    //先删除角色对应的模块和模块元素
                    _relevanceBusiness.Delete(p => p.FirstId == model.Id);

                    //模块数据去重
                    List <int> lsDistinctModule = model.Elements.Select(t => t.ModuleId).Distinct().ToList();
                    if (lsDistinctModule.Count() == 0)
                    {
                        return(Result.Fail("未获取到录入的数据"));
                    }

                    //获取 模块数据
                    var dbModule = _moduleBusiness.Query(p => p.Status == NomalStatus.Valid);

                    //多对多关系集中映射表
                    var lsRelevance = new List <PowerRelevance>();

                    //保存对应的模块
                    var lsModule = new List <PowerModule>();
                    //循环并拿去 模块的所有父节点
                    foreach (var item in lsDistinctModule)
                    {
                        var nodeModule = GetFatherList(dbModule, item);
                        lsModule.AddRange(nodeModule);
                    }

                    //拿到所有模块 去重
                    List <int> distinctModule = lsModule.Select(t => t.Id).Distinct().ToList();
                    foreach (var item in distinctModule)
                    {
                        lsRelevance.Add(new PowerRelevance()
                        {
                            Id          = 0,
                            FirstId     = model.Id,
                            SecondId    = item,
                            Identifiers = PowerIdentifiers.RoleByModule,
                            Remarks     = PowerIdentifiers.RoleByModule.GetDescription()
                        });
                    }
                    if (lsDistinctModule.Count() == 0)
                    {
                        return(Result.Fail("未获取到录入的数据"));
                    }

                    //角色对应的模块元素
                    foreach (var item in model.Elements)
                    {
                        lsRelevance.Add(new PowerRelevance()
                        {
                            Id          = 0,
                            FirstId     = model.Id,
                            SecondId    = item.Id,
                            Identifiers = PowerIdentifiers.RoleByElement,
                            Remarks     = PowerIdentifiers.RoleByElement.GetDescription()
                        });
                    }

                    _roleBusiness.Update(model);
                    _relevanceBusiness.AddRange(lsRelevance);
                    ts.Complete();
                    return(Result.Success());
                }
            }
            catch (Exception ex)
            {
                return(Result.Fail("操作失败:" + ex.Message));
            }
        }