public void Create(MenuDTO menu) { IUnitOfWork unitOfWork; using (unitOfWork = _unitOfWorkManager.Begin()) { var repo = unitOfWork.GetRepository <MenuDTO, int>(); repo.Add(menu); unitOfWork.Commit(); } }
/// <summary> /// 从 Controller/Action 中生成菜单数据 /// </summary> /// <param name="isSync">是否同步。True 表示同步,即删除原先的菜单数据重新生成。默认为 False,如果菜单数据已经存在,则直接返回。</param> /// <returns></returns> public List <MenuDTO> GenerateMenusByControllerAction(bool isSync = false) { //TODO, lock may affect the performance lock (_lockObj) { IUnitOfWork unitOfWork; using (unitOfWork = _unitOfWorkManager.Begin()) { var menuRepo = unitOfWork.GetRepository <MenuDTO, int>(); List <MenuDTO> menus; if (!isSync) { menus = menuRepo.GetAll().ToList(); if (menus != null && menus.Any()) { return(menus); } } //如果同步,则删除原先的数据重新生成。 menuRepo.RemoveAll(); Assembly assembly = Assembly.GetEntryAssembly(); menus = new List <MenuDTO>(); Regex regexClaimPolicy = new Regex(ClaimConstants.CLAIM_REGULAR_PATTERN); var controlleractionlist = ClaimsAnalyzer.GetControllerActionList(assembly); controlleractionlist.ForEach(action => { //获得 action 级别的 attribute IEnumerable <AuthorizeAttribute> controllerLevelAuthorizeAttrs = action.DeclaringType.GetCustomAttributes <AuthorizeAttribute>(true); IEnumerable <AuthorizeAttribute> actionLevelAuthorizeAttrs = action.GetCustomAttributes <AuthorizeAttribute>(true); //bool accessAllowed = true; List <Claim> claims = GetClaimsFromAuthorizeAttribute(controllerLevelAuthorizeAttrs, regexClaimPolicy); claims.AddRange(GetClaimsFromAuthorizeAttribute(actionLevelAuthorizeAttrs, regexClaimPolicy)); string controllerName = GetControllerName(action.DeclaringType); MenuDTO menu = new MenuDTO { Name = controllerName + action.Name, Url = _url.Action(action.Name, controllerName), Order = 0, Claims = String.Join(GeneralConstants.DelimeterSemicolon, claims ?? new List <Claim>()), Visible = true }; menus.Add(menu); menuRepo.AddRange(menus); }); unitOfWork.Commit(); return(menus); } } }