pruebas de unidad de seguridad fluidas

He estado escribiendo algunas pruebas en mi configuración de Fluent Security hasta tarde. Aunque puedo escribir pruebas para verificar si un método de acción del controlador tiene una política particular aplicada, por ejemplo

expectations.Expect<HomeController>(x=>x.Index()).Has<IgnorePolicy>();

Sin embargo, lo que estoy buscando es si puedo escribir pruebas específicas de roles.

por ejemplo, si le he dado acceso al rol de administrador solo a Index() de HomeController, quiero probar algo como

expectations.Expect<HomeController>(x=>x.Index()).Has<RequireRolePolicy>().For("Admin");

No encuentro ningún ejemplo en la red, ni ninguna extensión en FLuentSecurity.TestHelper que pueda ayudarme a hacer esto. ¿Alguna idea?

preguntado el 22 de mayo de 12 a las 16:05

2 Respuestas

La extensión Has tiene una sobrecarga que toma un predicado:

expectations.Expect<HomeController>(x => x.Index())
    .Has<RequireRolePolicy>(policy => policy.RolesRequired.Contains("Admin"));

Como puede ver, RequireRolePolicy expone una propiedad RolesRequired con la que puede probar.

Si se encuentra haciendo muchas comprobaciones para un conjunto particular de roles, le recomendaría crear una política personalizada y simplemente verificar esa política en su lugar. Hay un ejemplo de esto (una política de administrador) en la aplicación de muestra en github: https://github.com/kristofferahl/FluentSecurity/blob/master/FluentSecurity.SampleApplication/AdministratorPolicy.cs

contestado el 28 de mayo de 12 a las 14:05

¡Alegra oírlo! Por favor, no olvide aceptar esto como la respuesta a la pregunta. - kristoffer ahl

Aunque hice que esto funcionara, encontré una limitación severa para Fluent Security. ¡No es capaz de diferenciar entre los dos métodos de acción con el mismo nombre!

p.ej

public ActionResult Edit(int id){}

y

[HttpPost]
public ActionResult Edit(SomeCommand command){}

si quiero dar acceso a Invitado en Editar (Obtener) y Editar (Publicar) al Usuario administrador, no puedo hacerlo a través de Fluent Security ya que identifica ambos métodos como uno solo. ¡No recomendaré esta biblioteca ya que es una limitación severa!

contestado el 30 de mayo de 12 a las 14:05

Lamento que encuentre que FluentSecurity carece de algunas áreas, pero esta respuesta no tiene nada que ver con su pregunta original. ¡Elimine esta respuesta! En cuanto a la característica que le falta, estamos trabajando en mejoras todo el tiempo y si publica un problema en github, haremos todo lo posible para respaldar su solicitud. - kristoffer ahl

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.