/// <summary>
        ///  检查用户是否有权限
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="permissionCore"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <ResponseMessage <bool> > CheckPermissionAsync(string userId, string permissionCore, CancellationToken cancellationToken = default(CancellationToken))
        {
            var response = new ResponseMessage <bool>()
            {
                Extension = false
            };
            var user = await _userStore.GetAsync(userId);

            if (user is null)
            {
                response.Extension = false;
            }
            var permission = await _permissionStore.IQueryableListAsync().Where(y => y.Code == permissionCore).FirstOrDefaultAsync(cancellationToken);

            if (permission is null)
            {
                response.Extension = false;
            }
            var have = _permissionStore.Permissionitem_Expansions().Where(item => item.UserId == userId && permissionCore == item.PermissionCode);

            if (have.Any())
            {
                response.Extension = true;
            }
            return(response);
        }
Exemple #2
0
        /// <summary>
        /// 角色详情(查询所有拥有的权限)
        /// </summary>
        /// <param name="roleid"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <ResponseMessage <dynamic> > RoleDetailsAsync(string roleid, CancellationToken cancellationToken = default(CancellationToken))

        {
            var response = new ResponseMessage <dynamic>();
            var details  = from per in _permissionStore.IQueryableListAsync()
                           join role_permission in _rolePermissionStore.IQueryableListAsync()
                           on per.Id equals role_permission.PermissionId into s
                           from s1 in s.DefaultIfEmpty()
                           join role in _roleStore.IQueryableListAsync()
                           on s1.RoleId equals role.Id into t
                           from t1 in t.DefaultIfEmpty()
                           where t1.Id == roleid
                           select new
            {
                roleid         = t1.Id,
                rolename       = t1.Name,
                permissionid   = per.Id,
                permissionname = per.Name
            };

            response.Extension = await details.FirstOrDefaultAsync(cancellationToken);

            return(response);
        }
Exemple #3
0
        /// <summary>
        /// 绑定用户角色
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <ResponseMessage <bool> > BindUserRoleAsync(UserAndroleRequest request, CancellationToken cancellationToken = default(CancellationToken))
        {
            var response = new ResponseMessage <bool>()
            {
                Extension = false
            };

            using (var transaction = await _transaction.BeginTransaction())
            {
                try
                {
                    var oldUserRole = _userRoleStore.IQueryableListAsync().Where(item => item.UserId == request.UserId);

                    //新增用户角色和原来的不一致时,就直接删除,在重新添加
                    if (request.RoleId.Count != await oldUserRole.CountAsync(cancellationToken))
                    {
                        var oldid = await oldUserRole.Select(y => y.Id).ToListAsync(cancellationToken);

                        await _userRoleStore.DeleteRangeAsync(oldid);

                        var permissionExpansions = await _permissionStore.Permissionitem_Expansions().Where(u => u.UserId == request.UserId).ToListAsync(cancellationToken);

                        if (permissionExpansions.Any())
                        {
                            await _permissionStore.DeleteRangeAsync(permissionExpansions); //删除权限扩展表数据
                        }
                    }
                    else
                    {
                        response.Code      = ResponseCodeDefines.ObjectAlreadyExists;
                        response.Extension = false;
                        response.Message   = "该用户还是原来的角色";
                        return(response);
                    }
                    if (request.RoleId.Any())
                    {
                        var userAndrole = new List <User_Role>()
                        {
                        };
                        foreach (var item in request.RoleId)
                        {
                            userAndrole.Add(new User_Role
                            {
                                CreateTime = DateTime.Now,
                                Id         = Guid.NewGuid().ToString(),
                                RoleId     = item,
                                UserId     = request.UserId,
                            });
                        }
                        var info = await _rolePermissionStore.IQueryableListAsync().Where(c => request.RoleId.Contains(c.RoleId)).Select(u => u.PermissionId).ToListAsync();

                        if (info.Any())
                        {
                            var perExpansions = await _permissionStore.IQueryableListAsync().Where(j => info.Contains(j.Id)).Select(b => new Permissionitem_expansion
                            {
                                UserId         = request.UserId,
                                CreateTime     = DateTime.Now,
                                Id             = Guid.NewGuid().ToString(),
                                PermissionCode = b.Code,
                            }).ToListAsync();

                            await _permissionStore.AddRangeAsync(perExpansions); // 新增权限扩展表数据
                        }
                        await _userRoleStore.AddRangeEntityAsync(userAndrole);
                    }
                    await transaction.CommitAsync();

                    response.Extension = true;
                }
                catch (Exception e)
                {
                    await transaction.RollbackAsync();

                    _logger.LogError($"绑定用户角色失败,错误日志:{JsonHelper.ToJson(e.ToString())}");
                    throw new ZCustomizeException(ResponseCodeEnum.ServiceError, "绑定用户角色失败,请重试");
                }
            }
            return(response);
        }