¿Cómo puedo pasar más de un valor a un método RoleProvider getUserRoles costumbre en mi MVC aplicación?

StackOverflow https://stackoverflow.com/questions/2223741

Pregunta

Me gustaría pegar mi sistema para conceder permiso personalizado en una nueva aplicación ASP.NET MVC. He hecho una buena cantidad de trabajo de escribir mi propia AuthorizeAttribute personalizado para la aplicación. También he escrito mis propias MembershipProvider y RoleProvider implementaciones. Todo esto funciona muy bien, hasta que necesito para comprobar las funciones de mi usuario es una parte de. Yo hice todo esto por lo que yo podría simplemente hacer esto en mis controladores, y se usa la plantilla MVC defecto en VS2010 a retro ajusta a mi código como un prototipo:

[CustomAuth(Roles='X')]
public ActionResult DoSomething()

Mi sistema personalizado es un poco loco sin embargo. Yo no llamo a una base de datos SQL. Es un servicio web simple que proporciona 3 métodos: CheckPassword, GetPermissions, WebLogin. WebLogin simplemente envuelve tanto CheckPassword y GetPermissions en una sola llamada. Al utilizar WebLogin desde dentro ValidateUser no funcionó llamé testpassword desde dentro MembershipProvider.ValidateUser (nombre de usuario, contraseña) y cuando esta llamada fue exitosa yo regrese el ID de usuario, de lo contrario sería un fracaso y que vuelva a NULL.

El problema es cuando llamo en mi aplicación de RoleProvider. La clase abstracta definida GetRolesForUser con un solo parámetro de nombre de usuario. Mi método GetPermissions () necesita más de un nombre de usuario para trabajar. Se define así:

GetPermissions(privateKey,userName)

Es evidente que esta llamando desde dentro del siguiente método RoleProvider no va a trabajar. No puedo pasar PrivateKey con el método que se apoya fuera de la caja.

public override string[] GetRolesForUser(string username)

Es imposible conseguir mi propio método personalizado llamado desde dentro de mi propia RoleProvider personalizada?

¿Fue útil?

Solución

Puede emitir el proveedor de funciones como el tipo de encargo, que le dará acceso a sus métodos. Debido a que su función es fuera de la interfaz, sin embargo, esta fuertemente parejas su solicitud a su proveedor de papel -. Que es probablemente muy bien para sus propósitos

    RoleProvider rp = Roles.Provider;
    (rp as MyRoleProvider).GetPermissions(privateKey,userName);

Otros consejos

Creo que debe ser:

(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top