public IEnumerable <AdminModule> GetsysAdminModule(SystemAdmin admin) { var AMIDs = new List <int>(); foreach (var role in admin.AdminRoles) //导航属性效率都比较低下,以后数据量大后修改为手写的Linq或sql语句,商家后台的一样 2012-7-20 { foreach (var rm in role.AdminRole_Modules) { AMIDs.Add(rm.AMID); } } var listAdm = _adminModuleRepository.GetMany(new DirectSpecification <AdminModule>(am => AMIDs.Contains(am.AMID) && am.IsEnable)); var listResult = new List <AdminModule>(); //排除多余数据 foreach (var adm in listAdm) { if (!listResult.Contains(adm)) { listResult.Add(adm); } } listResult = listResult.OrderBy(x => x.SortFlag).ToList(); return(listResult); }
//实现添加角色关联 public void AddList(string[] moduleids, int arid) { AdminRole_Module arm = null; int wgts = 0;//权值逻辑与 foreach (var mid in moduleids) { int mmid = int.Parse(mid); AdminModule admd = _adminModuleRepository.GetByCondition(new DirectSpecification <AdminModule>(a => a.AMID == mmid)); if (admd.FID == 0)//如果是顶级菜单 { IEnumerable <AdminModule> listf = _adminModuleRepository.GetMany(new DirectSpecification <AdminModule>(m => m.FID == admd.AMID)); if (listf.Count() == 0)//如果不存在子级菜单 抛异常 { throw new InvalidOperationException("您选择的顶级功能菜单有不包含子级的数据,请取消那些项的选择!"); } } //读取当前功能id下的action 计算权值和 List <AdminAction> listaction = _adminActionRepository.GetMany(new DirectSpecification <AdminAction>(aa => aa.AMID == mmid)).ToList(); foreach (var mat in listaction) { wgts |= (int)mat.Weight; } //添加一条关联数据 try { arm = new AdminRole_Module() { ARID = arid, AMID = int.Parse(mid), Weights = wgts }; _repository.Add(arm); wgts = 0; arm = null; } catch { throw new InvalidOperationException("添加角色关联时出错!"); } } }
public string GetCurrRoleSecondModule(int arid, int firstid) { try { StringBuilder resulestr = new StringBuilder(); //读取角色表中的功能表 IEnumerable <AdminRole_Module> listarm = _adminR_MRepository.GetMany(new DirectSpecification <AdminRole_Module>(arm => arm.ARID == arid)); //封装amid到list List <int> listint = new List <int>(); foreach (var item in listarm) { listint.Add(item.AMID); } //读取FID=firstid的功能表数据(二级级菜单) IEnumerable <AdminModule> listam = _adminModuleRepository.GetMany(new DirectSpecification <AdminModule>(am => listint.Contains(am.AMID))).Where(am => am.FID == firstid); int cut = 0; //生成input type=radio 的标签 foreach (var item in listam) { cut++; //得到当前ARID firstid 的权值 resulestr.Append("<input type='radio' id='secondmd" + cut + "' name='secondModule' value='" + item.AMID + "' onclick='actionGetC(" + item.AMID + "," + arid + ")' /> <label for='secondmd" + cut + "'>" + item.ModuleName + "</label>"); if (cut % 4 == 0) { resulestr.Append("<br />"); } else { resulestr.Append(" "); } } return(resulestr.ToString()); } catch { throw new InvalidOperationException("获取二级菜单时出错!"); } }