/// <summary>
        /// 批量插入
        /// </summary>
        /// <param name="inputDto"></param>
        /// <returns></returns>
        public async Task CreateAsync(CreateGroupDto inputDto)
        {
            bool exist = await _groupRepository.Select.AnyAsync(r => r.Name == inputDto.Name);

            if (exist)
            {
                throw new LinCmsException("分组已存在,不可创建同名分组", ErrorCode.RepeatField);
            }

            LinGroup linGroup = _mapper.Map <LinGroup>(inputDto);

            using var conn = _freeSql.Ado.MasterPool.Get();
            DbTransaction transaction = conn.Value.BeginTransaction();

            try
            {
                long groupId = _freeSql.Insert(linGroup).WithTransaction(transaction).ExecuteIdentity();

                List <LinPermission> allPermissions = _freeSql.Select <LinPermission>().ToList();

                List <LinGroupPermission> linPermissions = new List <LinGroupPermission>();
                inputDto.PermissionIds.ForEach(r =>
                {
                    LinPermission pdDto = allPermissions.FirstOrDefault(u => u.Id == r);
                    if (pdDto == null)
                    {
                        throw new LinCmsException($"不存在此权限:{r}", ErrorCode.NotFound);
                    }
                    linPermissions.Add(new LinGroupPermission(groupId, pdDto.Id));
                });

                _freeSql.Insert <LinGroupPermission>().WithTransaction(transaction).AppendData(linPermissions).ExecuteAffrows();
                transaction.Commit();
            }
            catch
            {
                transaction.Rollback();
                throw;
            }

            //_freeSql.Transaction(() =>
            //{
            //    long groupId = _freeSql.Insert(linGroup).ExecuteIdentity();

            //    List<LinPermission> allPermissions = _freeSql.Select<LinPermission>().ToList();

            //    List<LinGroupPermission> linPermissions = new List<LinGroupPermission>();
            //    inputDto.PermissionIds.ForEach(r =>
            //    {
            //        LinPermission pdDto = allPermissions.FirstOrDefault(u => u.Id == r);
            //        if (pdDto == null)
            //        {
            //            throw new LinCmsException($"不存在此权限:{r}", ErrorCode.NotFound);
            //        }
            //        linPermissions.Add(new LinGroupPermission(groupId, pdDto.Id));
            //    });

            //    _freeSql.Insert<LinGroupPermission>().AppendData(linPermissions).ExecuteAffrows();
            //});
        }
示例#2
0
        /// <summary>
        /// 批量插入
        /// </summary>
        /// <param name="inputDto"></param>
        /// <returns></returns>
        public async Task CreateAsync(CreateGroupDto inputDto)
        {
            bool exist = await _groupRepository.Select.AnyAsync(r => r.Name == inputDto.Name);

            if (exist)
            {
                throw new LinCmsException("分组已存在,不可创建同名分组", ErrorCode.RepeatField);
            }

            LinGroup linGroup = _mapper.Map <LinGroup>(inputDto);

            _freeSql.Transaction(() =>
            {
                long groupId = _freeSql.Insert(linGroup).ExecuteIdentity();

                List <LinPermission> allPermissions = _freeSql.Select <LinPermission>().ToList();

                List <LinGroupPermission> linPermissions = new List <LinGroupPermission>();
                inputDto.PermissionIds.ForEach(r =>
                {
                    LinPermission pdDto = allPermissions.FirstOrDefault(u => u.Id == r);
                    if (pdDto == null)
                    {
                        throw new LinCmsException($"不存在此权限:{r}", ErrorCode.NotFound);
                    }
                    linPermissions.Add(new LinGroupPermission(groupId, pdDto.Id));
                });

                _freeSql.Insert <LinGroupPermission>().AppendData(linPermissions).ExecuteAffrows();
            });
        }
        /// <summary>
        /// 检查当前登录的用户的分组权限
        /// </summary>
        /// <param name="permission"></param>
        /// <returns></returns>
        public async Task <bool> CheckPermissionAsync(string permission)
        {
            long[] groups = CurrentUser.Groups;

            LinPermission linPermission = await _permissionRepository.Where(r => r.Name == permission).FirstAsync();

            bool existPermission = await _groupPermissionRepository.Select
                                   .AnyAsync(r => groups.Contains(r.GroupId) && r.PermissionId == linPermission.Id);

            return(existPermission);
        }
示例#4
0
        public async Task <bool> CheckPermissionAsync(string permission)
        {
            long[] groups = _currentUser.Groups;

            LinPermission linPermission = await _freeSql.Select <LinPermission>().Where(r => r.Name == permission).FirstAsync();

            bool existPermission = await _freeSql.Select <LinGroupPermission>()
                                   .AnyAsync(r => groups.Contains(r.GroupId) && r.PermissionId == linPermission.Id);

            return(existPermission);
        }
        /// <summary>
        /// 权限标签上的Permission改变时,删除数据库中存在的无效权限,并生成新的权限。
        /// </summary>
        /// <returns></returns>
        public async Task SeedPermissionAsync(List <PermissionDefinition> linCmsAttributes, CancellationToken cancellationToken)
        {
            List <LinPermission> insertPermissions = new List <LinPermission>();
            List <LinPermission> updatePermissions = new List <LinPermission>();

            List <LinPermission> allPermissions = await _permissionRepository.Select.ToListAsync();

            Expression <Func <LinGroupPermission, bool> > expression           = u => false;
            Expression <Func <LinPermission, bool> >      permissionExpression = u => false;

            allPermissions.ForEach(permissioin =>
            {
                if (linCmsAttributes.All(r => r.Permission != permissioin.Name))
                {
                    expression           = expression.Or(r => r.PermissionId == permissioin.Id);
                    permissionExpression = permissionExpression.Or(r => r.Id == permissioin.Id);
                }
            });
            int effectRows = await _permissionRepository.DeleteAsync(permissionExpression, cancellationToken);

            effectRows += await _groupPermissionRepository.DeleteAsync(expression, cancellationToken);

            _logger.LogInformation($"删除了{effectRows}条数据");

            linCmsAttributes.ForEach(r =>
            {
                LinPermission permissionEntity = allPermissions.FirstOrDefault(u => u.Module == r.Module && u.Name == r.Permission);
                if (permissionEntity == null)
                {
                    insertPermissions.Add(new LinPermission(r.Permission, r.Module, r.Router));
                }
                else
                {
                    bool routerExist = allPermissions.Any(u => u.Module == r.Module && u.Name == r.Permission && u.Router == r.Router);
                    if (!routerExist)
                    {
                        permissionEntity.Router = r.Router;
                        updatePermissions.Add(permissionEntity);
                    }
                }
            });

            await _permissionRepository.InsertAsync(insertPermissions, cancellationToken);

            _logger.LogInformation($"新增了{insertPermissions.Count}条数据");

            await _permissionRepository.UpdateAsync(updatePermissions, cancellationToken);

            _logger.LogInformation($"更新了{updatePermissions.Count}条数据");
        }
示例#6
0
        /// <summary>
        /// 批量插入
        /// </summary>
        /// <param name="inputDto"></param>
        /// <returns></returns>
        public async Task CreateAsync(CreateGroupDto inputDto)
        {
            bool exist = await _groupRepository.Select.AnyAsync(r => r.Name == inputDto.Name);

            if (exist)
            {
                throw new LinCmsException($"权限组标识符{inputDto.Name}已存在,不可创建同名权限组", ErrorCode.RepeatField);
            }

            LinGroup linGroup = Mapper.Map <LinGroup>(inputDto);

            using Object <DbConnection> conn = _freeSql.Ado.MasterPool.Get();
            using DbTransaction transaction = await conn.Value.BeginTransactionAsync();

            try
            {
                long groupId = await _freeSql.Insert(linGroup).WithTransaction(transaction).ExecuteIdentityAsync();

                List <LinPermission> allPermissions = await _freeSql.Select <LinPermission>().WithTransaction(transaction).ToListAsync();

                List <LinGroupPermission> linPermissions = new List <LinGroupPermission>();
                inputDto.PermissionIds.ForEach(r =>
                {
                    LinPermission pdDto = allPermissions.FirstOrDefault(u => u.Id == r);
                    if (pdDto == null)
                    {
                        throw new LinCmsException($"不存在此权限:{r}", ErrorCode.NotFound);
                    }
                    linPermissions.Add(new LinGroupPermission(groupId, pdDto.Id));
                });

                await _freeSql.Insert <LinGroupPermission>()
                .WithTransaction(transaction)
                .AppendData(linPermissions)
                .ExecuteAffrowsAsync();

                await transaction.CommitAsync();
            }
            catch
            {
                await transaction.RollbackAsync();

                throw;
            }
        }