Exemplo n.º 1
0
        public async Task <IResultModel> BindMenu(RoleMenuBindModel model)
        {
            var exists = await _repository.ExistsAsync(model.Id);

            if (!exists)
            {
                return(ResultModel.NotExists);
            }

            List <RoleMenuEntity> entityList = null;

            if (model.Menus != null && model.Menus.Any())
            {
                entityList = model.Menus.Select(m => new RoleMenuEntity {
                    RoleId = model.Id, MenuId = m
                }).ToList();
            }

            /*
             * 操作逻辑
             * 1、清除已有的绑定数据
             * 2、添加新的绑定数据
             */
            using (var tran = _roleMenuRepository.BeginTransaction())
            {
                var clear = await _roleMenuRepository.DeleteByRoleId(model.Id, tran);

                if (clear)
                {
                    if (entityList == null || !entityList.Any() || await _roleMenuRepository.AddAsync(entityList, tran))
                    {
                        tran.Commit();
                        await ClearAccountPermissionCache(model.Id);

                        return(ResultModel.Success());
                    }
                }
            }

            return(ResultModel.Failed());
        }