2009-04-16 22 views
5

? En mi aplicación asp.net mvc, estoy usando el proveedor de membresía activedirectory. En el directorio activo, he creado un par de roles (grupos) similares a, para simplificar este ejemplo, "normal" y "administrador".¿Cómo puedo implementar una jerarquía de roles en una aplicación asp.net mvc usando activedirectorymembershipprovider

Actualmente estoy preguntando si el usuario está en función obteniendo el IPrincipal del httpcontext y llamando a User.IsInRole (nameOfRoleGoesHere) ;.

El comportamiento que busco es que pueda preguntar si el usuario tiene el rol de "administrador" e implícitamente preguntar si el usuario tiene todos los roles por debajo (en este caso, el rol "normal" estaría debajo " administrador"). Como mis roles son principalmente verticales (si tiene algún sentido), este tipo de herencia de roles parece tener sentido para mi aplicación en este momento.

¿Cómo puedo obtener este comportamiento? ¿Debo implementar alguna lógica personalizada que me permita solicitar el rol de "administrador", pero abstraer en realidad preguntando por "normal" y "administrador" en el directorio activo detrás de escena? ¿es posible estructurar grupos en el directorio activo de alguna manera dándome este comportamiento automáticamente?

Disculpas por cualquier gran malentendido de asp.net, el directorio activo y la seguridad de .net por mi parte - soy novato y estoy experimentando.

Respuesta

3

AD apoya el concepto de un grupo de ser un miembro de otro grupo?

por lo que podría tener el siguiente:

Usuarios: Anne, Bob, Charlie, Douglas, Elliot, Fred y George.

Roles: normal, Editor, administración

Luego, en la definición de cada grupo como:

administración tiene los siguientes miembros: George

Editor tiene los siguientes miembros: "Administrador", Douglas, Elliot

Normal tiene los siguientes miembros: "Editor", "Administrador", Anne, Bob, Charlie

Por lo tanto, usted sabe que George es miembro de Normal, Editor y Administrador, porque todos los miembros de Admin están incluidos en esos grupos, mientras que Douglas es solo un miembro de Editor y Normal, y Anne es solo un usuario Normal, y AD diría "sí, George es un usuario Normal" si usted lo solicitó.

Sin embargo: No (por lo que yo sé) es un oficial, MS ActiveDirectory apoyaron RoleProvider que pueblan el RolesPrinciple con los papeles correctos AD - hay un par por ahí like this one on CodePlex lo que tiene que definió como su proveedor de roles?

El proveedor de funciones por defecto de ASP.NET no admite jerarquías de roles, por lo que sería ya sea que o bien:

  1. poner al usuario en cada papel que tienen acceso a, y sólo comprobar el papel que están interesados ​​en.
  2. Ponga al usuario en la función más poderosa a la que pueda acceder, y luego verifique para cada función que debería tener acceso.
  3. Escriba/encuentre un role provider que admita jerarquías, similmente al devolver verdadero si el usuario tiene un rol de orden superior.
+1

Cuando definió la función/grupo Normal, ¿necesitó incluir "Administrador" como miembro de ese grupo? (Supongo que no es porque el administrador ya está incluido en el grupo Editor que está en el grupo Normal. – Guy

+0

Para ser honesto, probablemente no, pero estaba más seguro que arrepentido;) –

1

Active Directory realmente no tiene un concepto de jerarquía en términos de membresía. Un usuario es miembro de uno, varios, muchos grupos, pero solo eso. Es miembro del grupo "Administrador", sí o no. También podría ser miembro de GRoup A, Gropu B, Group F y Group M, pero no hay una "jerarquía de roles" real que usted esté buscando.

Supongo que, en cierto modo, tener la capacidad de simplemente combinar cualquier cantidad de membresías grupales es probablemente incluso más flexible y confiable que tener una jerarquía, en mi opinión.

Marc

Cuestiones relacionadas