public static PermissionViewModel ToViewModel(this DbPermission permission) { return(new PermissionViewModel() { Name = permission.Name, State = permission.State }); }
private DbPermission GetDbPermission(string name, string state, MsSqlMonitorEntities context) { DbPermission permission = context.DbPermissions.FirstOrDefault(p => p.Name == name && p.State == state); if (permission == null) { permission = context.DbPermissions.Local.FirstOrDefault(p => p.Name == name && p.State == state); } if (permission == null) { permission = new DbPermission() { Name = name, State = state }; context.DbPermissions.Add(permission); } return(permission); }
private void SetDatabasePrinciaplsPermissions(List <Tuple <Instance, InstanceInfo> > linkedInfo, MsSqlMonitorEntities context) { linkedInfo.ForEach(li => // In every instance { foreach (DatabaseInfo dbInfo in li.Item2.Databases) // in every database in the instance { foreach (PermissionInfo permInfo in li.Item2.Permissions) { // Permission should be unique, so we take one from database if it exists otherwise create new. DbPermission permission = GetDbPermission(permInfo.Name, permInfo.State, context); int toFind = permInfo.AssociatedIds.Count; // count of associated with permission principals foreach (DbRoleInfo role in dbInfo.Roles) { if (permInfo.AssociatedIds.Contains(role.NativeId)) { role.Entity.Permissions.Add(permission); toFind--; } if (toFind == 0) { break; } } if (toFind == 0) { continue; } foreach (DbUserInfo user in dbInfo.Users) { if (permInfo.AssociatedIds.Contains(user.NativeId)) { user.Entity.Permissions.Add(permission); toFind--; } if (toFind == 0) { break; } } } } }); }
public async Task SetPermissionClaimAsync(GuildSubject subject, Claim claim, CancellationToken cancellationToken) { if (!AllowedSubjectTypes.Contains(subject.Type)) { throw new ArgumentException("Invalid subject type for claims", nameof(subject)); } using var dbContext = _dbFactory(); var dbPermissions = dbContext.Permissions.AsNoTracking().Where(p => (p.ServerId == subject.GuildId) && (p.SubjectId == subject.Id) && (p.SubjectType == subject.Type)); var dbPermission = await dbPermissions.FirstOrDefaultAsync(p => p.Identifier == claim.Identifier, cancellationToken); if (dbPermission is not null) { return; } dbPermission = new DbPermission(subject.Type, subject.Id, subject.GuildId, claim.Identifier, claim.Allow); dbContext.Permissions.Add(dbPermission); await dbContext.SaveChangesAsync(cancellationToken); }