Example #1
0
        /// <inheritdoc />
        public async Task <IReadOnlyCollection <AuthorizationClaim> > GetGuildUserClaimsAsync(IGuildUser guildUser, params AuthorizationClaim[] filterClaims)
        {
            if (guildUser == null)
            {
                throw new ArgumentNullException(nameof(guildUser));
            }

            if (guildUser.Id == CurrentUserId)
            {
                return(CurrentClaims);
            }

            var selfUser = await SelfUserProvider.GetSelfUserAsync();

            if (guildUser.Id == selfUser.Id || guildUser.GuildPermissions.Administrator)
            {
                return(Enum.GetValues(typeof(AuthorizationClaim)).Cast <AuthorizationClaim>().ToArray());
            }

            return(await LookupPosessedClaimsAsync(guildUser.GuildId, guildUser.RoleIds, guildUser.Id, filterClaims));
        }
Example #2
0
        /// <inheritdoc />
        public async Task AutoConfigureGuildAsync(IGuild guild, CancellationToken cancellationToken = default)
        {
            if (await ClaimMappingRepository.AnyAsync(new ClaimMappingSearchCriteria()
            {
                GuildId = guild.Id,
                IsDeleted = false,
            }))
            {
                return;
            }

            var selfUser = await SelfUserProvider.GetSelfUserAsync(cancellationToken);

            // Need the bot user to exist, before we start adding claims, created by the bot user.
            await UserService.TrackUserAsync(guild, selfUser.Id);

            using (var transaction = await ClaimMappingRepository.BeginCreateTransactionAsync())
            {
                foreach (var claim in Enum.GetValues(typeof(AuthorizationClaim)).Cast <AuthorizationClaim>())
                {
                    foreach (var role in guild.Roles.Where(x => x.Permissions.Administrator))
                    {
                        await ClaimMappingRepository.CreateAsync(new ClaimMappingCreationData()
                        {
                            Type        = ClaimMappingType.Granted,
                            GuildId     = guild.Id,
                            RoleId      = role.Id,
                            UserId      = null,
                            Claim       = claim,
                            CreatedById = selfUser.Id
                        });
                    }
                }

                transaction.Commit();
            }
        }