Я боюсь в задаче Я не могу найти решениеКак получить статический объект для удержания для каждого зарегистрированного пользователя?
У меня есть приложение asp net mvc 4, в котором я реализовал систему разрешений. Это приложение имеет статический объект, который заполняется информацией о разрешениях при входе пользователя в систему.
Он создает новый объект для каждого пользователя, как только он входит в
Этот объект проверяется каждый раз, когда пользователи вызывать действие.
Но в случае, если администратор изменил какое-либо правило разрешения, мне нужно найти способ распространения этого изменения для всех зарегистрированных пользователей. В настоящий момент пользователю необходимо снова выйти из системы и войти в систему, чтобы изменения вступили в силу.
Я могу получить всех текущих зарегистрированных пользователей. Но как получить статический объект, связанный с каждым пользователем? Код немного большим, но он работает ... Мне просто нужно найти способ, чтобы заполучить его для каждого авторизованного пользователя
Это объект:
модель:
public static class permissionTemp
{
public static Guid userGuid { get; set; }
public static string[] grupos { get; set; }
public static string[] permissoes { get; set; }
}
контроллер:
public bool createPermissionObject(Guid userID, string username)
{
using (gedaiappEntities context = new gedaiappEntities())
{
//Cria objeto global de permissões
gedaiapp.Models.permissionTemp.userGuid = userID;
//Resgata todos os grupos do usuário
gedaiapp.Models.permissionTemp.grupos = Roles.GetRolesForUser(username);
List<string> c = new List<string>();
//Primeiro carrega permissões dos Grupos atribuidos ao usuário
foreach (var grupo in gedaiapp.Models.permissionTemp.grupos)
{
//Recupera id do grupo
var grpId = (from a in context.aspnet_Roles
where a.RoleName == grupo
select a.RoleId).First();
//Resgata todas as permissões do grupo
var permGrpIdsObj = from a in context.sistema_permissoes_grupos
where a.groupId == grpId
select a.idPermissao;
if (permGrpIdsObj.Any())
{
var permGrpIdsLst = permGrpIdsObj.ToList();
foreach (var permGrpId in permGrpIdsLst)
{
var permName = (from a in context.aspnet_Roles
where a.RoleId == permGrpId
select a.RoleName).First();
c.Add(permName);
}
}
}
//Por último carrega as permissões individuais do usuário
var permUsrIdsObj = from a in context.sistema_permissoes_usuarios
where a.userGuid == userID
select a.idPermissao;
if (permUsrIdsObj.Any())
{
var permUsrIds = permUsrIdsObj.ToList();
foreach (var permUsrId in permUsrIds)
{
var perm = (from a in context.aspnet_Roles
where a.RoleId == permUsrId
select a.RoleName).First();
c.Add(perm);
}
}
//Atribui todas as permissões encontradas (GRUPO e INDIVIDUAIS) para o modelo
gedaiapp.Models.permissionTemp.permissoes = c.ToArray();
}
return true;
}
Зачем использовать статический класс для хранения данных пользовательского экземпляра? Это будет масштабироваться точно для одного пользователя. –
Почему бы не изменить статический класс на открытый класс и создать «Список <разрешениеTemp>" – MethodMan
. Если вы не знаете, ваш статический класс 'permissionTemp' распространяется среди всех зарегистрированных пользователей, он не создает новый для каждого пользователя. – Khan