2011-09-24 26 views
8

Hice mis primeros pasos hacia MEF hace unos meses y todo parecía estar bien hasta ahora. Lo que quiero hacer es usar MEF ahora de mis aplicaciones reales y cargar o podemos decir mostrar los componentes de UI basados ​​en permisos de usuarios autenticados. Estoy desarrollando un sistema de gestión de pacientes para la clínica y quiero implementar un escenario donde los componentes de UI compuestos por MEF se muestren según el tipo de usuario. por ejemplo, si el usuario autenticado es un médico, quiero mostrar componentes particulares y ocultar otros.Permisos de usuario basados ​​en componentes MEF

Lo que estoy tratando de lograr es algo así como

ISystemComponent que tiene algunas propiedades y métodos de administración por lo que puede controlar cada nivel de acceso del usuario y en base a los registros de base de datos controles compuestas MEF se visualiza para el usuario final. También pienso en usar la interfaz MetaData mientras exporto componentes, así que al usar esto, ¿cómo puedo obtener el resultado deseado?

cualquier dirección correcta se apreciará

+0

¿Capa de presentación de destino? WPF o WinForms? –

+0

no winforms pero WPF o podría ser Silverlight también –

+0

Tiene varios frameworks que hacen exactamente lo que quiere, p. PRISM (que puede usar MEF u otro contenedor de IOC) –

Respuesta

2

El artículo here detalles usando AOP para inyectar las preocupaciones de seguridad en MEF. Esta podría ser una forma de hacerlo: no he encontrado nada en MEF que permita este tipo de funcionalidad en otro lado.

0

Creo que PRISM puede hacer exactamente lo que usted ha descrito. Eche un vistazo al this Code Project article. Puede crear varios catálogos de módulo (de acuerdo con los permisos de usuario), y el catálogo de carga dinámica a partir de XML como se describe Here:

var catalog = ModuleCatalog.CreateFromXaml(new Uri("catalog.xaml", 
               UriKind.Relative)); 
+0

No uso PRISM y no está planeado para ser utilizado en nuestro proyecto, hemos tenido muchas cosas desde el principio, ya que este es realmente el sistema empresarial –

4

me hicieron esto mediante el uso de un atributo de metadatos para un ID de módulo y una tabla que tiene los permisos.

Realice ImportMany en la interfaz y luego filtúelo según el atributo de metadatos utilizando la reflexión y compárelo con los permisos de la tabla.

Esta publicación de blog describe todos los MEF implicados.

http://blogs.microsoft.co.il/blogs/bnaya/archive/2010/01/20/mef-for-beginner-metadata-part-8.aspx

Otros enlaces ..

http://blogs.microsoft.co.il/blogs/bnaya/archive/2010/01/09/mef-for-beginner-toc.aspx

http://mef.codeplex.com/wikipage?title=Exports%20and%20Metadata&referringTitle=Guide

MEF Plugins with Security and Profiles Efficency

MEF with ImportMany and ExportMetadata

Esto le mostrará cómo importar desde xaml

http://blogs.microsoft.co.il/blogs/bnaya/archive/2010/03/20/mef-for-beginner-import-from-xaml-part-11.aspx

+0

gracias a esos enlaces que realmente me han ayudado. Traté exactamente de usar metadatos y utilizar algún tipo de recopilación dentro del atributo para administrar la política de acceso y mientras comprueba la composición, si el usuario actualmente autenticado tiene el mismo permiso y solo en este caso muestra el complemento al usuario –

0

He implementado esto en WPF/MVVM usando Cinch y SQL backend tablas que asignan controles a los roles y permisos de visualización. Esto le permite controlar permisos a través del modelo de vista y cambiar la visibilidad en cualquier punto.

Cinch ayuda con algunos de los trabajos pesados ​​de MVVM mientras le permite aprovechar MEF a través de MeffedMVVM o Prisma.

Cuestiones relacionadas