Come posso recuperare tutti i ruoli (gruppi) di un utente è un membro di?
-
11-09-2019 - |
Domanda
C'è un modo per ottenere un elenco di ruoli di un utente di Windows autenticato è in, senza esplicitamente la verifica con il metodo WindowsPrincipal.IsInRole
?
Soluzione
WindowsPrincipal.IsInRole
solo controlla se l'utente è un membro del gruppo con quel nome; un gruppo di Windows è una di ruolo. È possibile ottenere un elenco dei gruppi che un utente è un membro di dalla proprietà WindowsIdentity.Groups
.
È possibile ottenere WindowsIdentity
dal WindowsPrincipal
:
WindowsIdentity identity = WindowsPrincipal.Identity as WindowsIdentity;
o si può ottenere da un metodo factory on WindowsIdentity:
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsIdenity.Groups
è una raccolta di IdentityReference
che appena ti dà il SID del gruppo. Se avete bisogno i nomi dei gruppi è necessario tradurre il IdentityReference
in un NTAccount
e ottenere il valore:
var groupNames = from id in identity.Groups
select id.Translate(typeof(NTAccount)).Value;
Altri suggerimenti
EDIT: Josh mi ha battuto ad esso! :)
Prova questo
using System;
using System.Security.Principal;
namespace ConsoleApplication5
{
internal class Program
{
private static void Main(string[] args)
{
var identity = WindowsIdentity.GetCurrent();
foreach (var groupId in identity.Groups)
{
var group = groupId.Translate(typeof (NTAccount));
Console.WriteLine(group);
}
}
}
}
Se non si è connessi al server di dominio, la funzione Translate
può gettare il seguente The trust relationship between this workstation and the primary domain failed.
eccezione
Ma per la maggior parte dei gruppi, che sarà ok, per cui uso:
foreach(var s in WindowsIdentity.GetCurrent().Groups) {
try {
IdentityReference grp = s.Translate(typeof (NTAccount));
groups.Add(grp.Value);
}
catch(Exception) { }
}
In un sito ASP.NET MVC, si può fare in questo modo:
Aggiungi questo al vostro web.config:
<system.web>
...
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
...
</system.web>
Quindi è possibile utilizzare Roles.GetRolesForUser()
per ottenere tutti i gruppi di Windows che l'utente è un membro di. Assicurati di essere using System.Web.Security
.