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;
                     }
                 }
             }
         }
     });
 }
Exemple #4
0
        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);
        }