public async void GrantedGlobalPermissionReturnsTrueForGrantedLocalWithDifferingTarget() { var requiredPermission = (Permission.SetClass, PermissionTarget.Self); var grantedLocalPermission = new LocalPermission { Permission = Permission.SetClass, Target = PermissionTarget.Self, ServerDiscordID = (long)this.Guild.Id, UserDiscordID = (long)this.User.Id }; var grantedGlobalPermission = new GlobalPermission { Permission = Permission.SetClass, Target = PermissionTarget.Other, UserDiscordID = (long)this.User.Id }; await this.Database.GlobalPermissions.AddAsync(grantedGlobalPermission); await this.Database.LocalPermissions.AddAsync(grantedLocalPermission); await this.Database.SaveChangesAsync(); Assert.True(await this.Permissions.HasPermissionAsync(this.Database, this.Guild, this.User, requiredPermission)); }
/// <summary> /// Grants the specified user the given permission. If the user already has the permission, it is augmented with /// the new scope and target (if they are more permissive than the existing ones). /// </summary> /// <param name="db">The database.</param> /// <param name="discordServer">The Discord server the permission was granted on.</param> /// <param name="discordUser">The Discord user.</param> /// <param name="grantedPermission">The granted permission.</param> /// <returns>A task wrapping the granting of the permission.</returns> public async Task GrantLocalPermissionAsync ( [NotNull] GlobalInfoContext db, [NotNull] IGuild discordServer, [NotNull] IUser discordUser, [NotNull] LocalPermission grantedPermission ) { var existingPermission = await GetLocalUserPermissions(db, discordUser, discordServer).FirstOrDefaultAsync ( p => p.Permission == grantedPermission.Permission && p.ServerDiscordID == (long)discordServer.Id ); if (existingPermission is null) { await db.LocalPermissions.AddAsync(grantedPermission); } else { // Include the new target permissions existingPermission.Target |= grantedPermission.Target; } await db.SaveChangesAsync(); }
/// <summary> /// Adds a mocked local permission to the database. /// </summary> /// <param name="grantedPermission">The granted permission.</param> public void AddMockedLocalPermission([NotNull] LocalPermission grantedPermission) { using (var db = GetDatabaseContext()) { db.LocalPermissions.Add(grantedPermission); db.SaveChanges(); } }
public async Task Default([NotNull] IUser discordUser, Permission grantedPermission, PermissionTarget grantedTarget = PermissionTarget.Self) { var newPermission = new LocalPermission { Permission = grantedPermission, Target = grantedTarget, ServerDiscordID = (long)this.Context.Guild.Id }; await this.Permissions.GrantLocalPermissionAsync(this.Database, this.Context.Guild, discordUser, newPermission); await this.Feedback.SendConfirmationAsync(this.Context, $"{grantedPermission.ToString().Humanize().Transform(To.TitleCase)} granted to {discordUser.Mention}."); }
/// <summary> /// Grants the specified user their default permissions on the given server. /// </summary> /// <param name="db">The database.</param> /// <param name="server">The server to grant the permissions on.</param> /// <param name="user">The user to grant the permissions to.</param> /// <returns>A task wrapping the granting of default permissions.</returns> public async Task GrantDefaultPermissionsAsync([NotNull] GlobalInfoContext db, [NotNull] IGuild server, [NotNull] IUser user) { foreach (var permission in DefaultPermissions.DefaultPermissionSet) { var scopedPermission = new LocalPermission { Permission = permission.Permission, Target = permission.Target, UserDiscordID = (long)user.Id, ServerDiscordID = (long)server.Id }; await db.LocalPermissions.AddAsync(scopedPermission); } await db.SaveChangesAsync(); }
public async void GrantedOtherTargetReturnsFalseForMatchingAndSelfTarget() { var requiredPermission = (Permission.SetClass, PermissionTarget.Self); var grantedPermission = new LocalPermission { Permission = Permission.SetClass, Target = PermissionTarget.Other, ServerDiscordID = (long)this.Guild.Id, UserDiscordID = (long)this.User.Id }; await this.Database.LocalPermissions.AddAsync(grantedPermission); await this.Database.SaveChangesAsync(); Assert.False(await this.Permissions.HasPermissionAsync(this.Database, this.Guild, this.User, requiredPermission)); }
public async void ExactlyMatchingLocalPermissionSetReturnsTrue() { var requiredPermission = (Permission.SetClass, PermissionTarget.Other); var grantedPermission = new LocalPermission { Permission = Permission.SetClass, Target = PermissionTarget.Other, ServerDiscordID = (long)this.Guild.Id, UserDiscordID = (long)this.User.Id }; await this.Database.LocalPermissions.AddAsync(grantedPermission); await this.Database.SaveChangesAsync(); Assert.True(await this.Permissions.HasPermissionAsync(this.Database, this.Guild, this.User, requiredPermission)); }
public async void GrantedLocalPermissionReturnsFalseIfServerIDsDiffer() { var anotherServer = MockHelper.CreateDiscordGuild(2); var requiredPermission = (Permission.SetClass, PermissionTarget.Self); var grantedPermission = new LocalPermission { Permission = Permission.SetClass, Target = PermissionTarget.Other, ServerDiscordID = (long)anotherServer.Id }; await this.Database.LocalPermissions.AddAsync(grantedPermission); await this.Database.SaveChangesAsync(); Assert.False(await this.Permissions.HasPermissionAsync(this.Database, this.Guild, this.User, requiredPermission)); }