예제 #1
0
        /// <inheritdoc />
        public async Task AutoConfigureGuildAsync(IGuild guild)
        {
            if (await ClaimMappingRepository.AnyAsync(guild.Id))
            {
                return;
            }

            await UserService.TrackUserAsync(DiscordClient.CurrentUser);

            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 = DiscordClient.CurrentUser.Id
                    });
                }

                await ClaimMappingRepository.CreateAsync(new ClaimMappingCreationData()
                {
                    Type        = ClaimMappingType.Granted,
                    GuildId     = guild.Id,
                    RoleId      = null,
                    UserId      = DiscordClient.CurrentUser.Id,
                    Claim       = claim,
                    CreatedById = DiscordClient.CurrentUser.Id
                });
            }
        }
예제 #2
0
        /// <inheritdoc />
        public async Task AddClaimMapping(IGuildUser user, ClaimMappingType type, AuthorizationClaim claim)
        {
            RequireAuthenticatedUser();
            RequireClaims(AuthorizationClaim.AuthorizationConfigure);

            using (var transaction = await ClaimMappingRepository.BeginCreateTransactionAsync())
            {
                if (await ClaimMappingRepository.AnyAsync(new ClaimMappingSearchCriteria()
                {
                    Types = new[] { type },
                    GuildId = user.Guild.Id,
                    UserId = user.Id,
                    Claims = new[] { claim },
                    IsDeleted = false,
                }))
                {
                    throw new InvalidOperationException($"A claim mapping of type {type} to claim {claim} for user {user.GetDisplayName()} already exists");
                }

                await ClaimMappingRepository.CreateAsync(new ClaimMappingCreationData()
                {
                    GuildId     = user.Guild.Id,
                    Type        = type,
                    UserId      = user.Id,
                    Claim       = claim,
                    CreatedById = CurrentUserId.Value
                });

                transaction.Commit();
            }
        }
예제 #3
0
        /// <inheritdoc />
        public async Task AutoConfigureGuildAsync(IGuild guild)
        {
            if (await ClaimMappingRepository.AnyAsync(new ClaimMappingSearchCriteria()
            {
                GuildId = guild.Id,
                IsDeleted = false,
            }))
            {
                return;
            }

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

            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 = DiscordClient.CurrentUser.Id
                        });
                    }
                }

                transaction.Commit();
            }
        }