解決策が見つからないタスクに苦労しています
私は許可システムを実装した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;
}