示例#1
0
        public async Task UpdateRoleAuth(long id, RoleUpdateAuthInput input)
        {
            var role = await _roleDomainService.Get(id);

            role.AuthNumbers = null;

            if (input.ModuleIds?.Count > 0)
            {
                var modules = await _moduleRep.GetListAsync(input.ModuleIds);

                var maxLayer = modules.Max(a => a.Layer);

                var authNumbers = new List <long>();
                for (int i = 1; i <= maxLayer; i++)
                {
                    var authNumber = 0L;
                    var items      = modules.Where(a => a.Layer == i);
                    foreach (var x in items)
                    {
                        authNumber = authNumber | x.Number.Value;
                    }
                    authNumbers.Add(authNumber);
                }

                role.AuthNumbers = JsonConvert.SerializeObject(authNumbers);
            }

            var users = await _userRep.GetListAsync(new UserQuery()
            {
                RoleLevel = role.Level
            });

            var ids = users.Where(a => a.AuthNumbers != role.AuthNumbers).Select(a => a.Id).ToList();

            await _roleDomainService.UpdateRoleAuth(role);

            await _userRep.UpdateAuth(role.Id, role.AuthNumbers);

            //注销该角色下用户的登录信息
            if (ids.Count < 1)
            {
                return;
            }

            await _publisher.PublishAsync(nameof(LogoutForUpdateAuthEventData), new LogoutForUpdateAuthEventData
            {
                UserIds = ids
            });
        }