我在一项找不到解决方案的任务中苦苦挣扎
我有一个 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;
}