コード例 #1
0
 public virtual async Task SetUserMenusAsync(UserMenuInput input)
 {
     await MenuManager.SetUserMenusAsync(input.UserId, input.MenuIds);
 }
コード例 #2
0
 public virtual async Task SetRoleMenusAsync(RoleMenuInput input)
 {
     await MenuManager.SetRoleMenusAsync(input.RoleName, input.MenuIds);
 }
コード例 #3
0
        public virtual async Task <MenuDto> UpdateAsync(Guid id, MenuUpdateDto input)
        {
            var menu = await MenuRepository.GetAsync(id);

            // 利用布局约定的数据字典来校验必须的路由元数据,元数据的加入是为了适配多端路由
            var layout = await LayoutRepository.GetAsync(menu.LayoutId);

            var data = await DataRepository.GetAsync(layout.DataId);

            foreach (var dataItem in data.Items)
            {
                if (!input.Meta.TryGetValue(dataItem.Name, out object meta))
                {
                    if (!dataItem.AllowBeNull)
                    {
                        throw new BusinessException(PlatformErrorCodes.MenuMissingMetadata)
                              .WithData("Name", dataItem.DisplayName)
                              .WithData("DataName", data.DisplayName);
                    }
                    // 是否需要设定默认值?
                    menu.SetProperty(dataItem.Name, dataItem.DefaultValue);
                }
                else
                {
                    // 与现有的数据做对比
                    var menuMeta = menu.GetProperty(dataItem.Name);
                    if (menuMeta != null && menuMeta.Equals(meta))
                    {
                        continue;
                    }
                    // 需要检查参数是否有效
                    menu.SetProperty(dataItem.Name, DataItemMapping.MapToString(dataItem.ValueType, meta));
                }
            }

            if (!string.Equals(menu.Name, input.Name, StringComparison.InvariantCultureIgnoreCase))
            {
                menu.Name = input.Name;
            }
            if (!string.Equals(menu.DisplayName, input.DisplayName, StringComparison.InvariantCultureIgnoreCase))
            {
                menu.DisplayName = input.DisplayName;
            }
            if (!string.Equals(menu.Description, input.Description, StringComparison.InvariantCultureIgnoreCase))
            {
                menu.Description = input.Description;
            }
            if (!string.Equals(menu.Path, input.Path, StringComparison.InvariantCultureIgnoreCase))
            {
                menu.Path = input.Path;
            }
            if (!string.Equals(menu.Redirect, input.Redirect, StringComparison.InvariantCultureIgnoreCase))
            {
                menu.Redirect = input.Redirect;
            }
            if (!string.Equals(menu.Component, input.Component, StringComparison.InvariantCultureIgnoreCase))
            {
                menu.Component = input.Component;
            }

            menu.IsPublic = input.IsPublic;

            await MenuManager.UpdateAsync(menu);

            await CurrentUnitOfWork.SaveChangesAsync();

            return(ObjectMapper.Map <Menu, MenuDto>(menu));
        }