2008-11-21 4 views

Répondre

6

Généralement, l'utilisateur et le contexte de sécurité dans lequel l'utilisateur interagit sont différents, et donc s'ils sont modélisés de manière générique, ils doivent être séparés comme le font les interfaces IPrincipal et IIdentity. (Vous pouvez imaginer des applications où le même utilisateur peut avoir des rôles différents pour interagir avec le système.)

Il y a des applications où ces deux concepts sont identiques, dans ce cas je pense que vous pouvez implémenter les deux interfaces en toute sécurité avec une seule classe . Cela est particulièrement vrai si vous n'exposez pas directement la classe d'implémentation à la logique d'application, uniquement via les interfaces IPrincial et IIdentity. Si vous gardez cette séparation, vous pouvez à tout moment refactoriser votre classe sans casser la logique de l'application.

Un autre aspect que vous devez garder à l'esprit: habituellement pour configurer le contexte de sécurité pour un utilisateur est plus coûteux que pour installer une identité (vous devez saisir les permissions, etc.). Cependant, dans certains cas, l'application fait simplement référence à un utilisateur, mais il n'est pas nécessaire d'avoir un contexte de sécurité correctement configuré. Dans ces cas, l'initialisation d'une instance de classe d'utilisateurs, qui sert à la fois d'identité et de principal, est probablement un problème de performance. (Bien sûr, vous pouvez résoudre cela avec d'autres techniques, pas seulement en divisant les classes.)

Et enfin, vous devriez également considérer, si vous voulez implémenter le IIdentity/IPrincipal avec votre propre classe d'utilisateurs ou juste remplissez une instance GenericPrincipal/GenericIdentity. Le fait le plus important ici est que les instances IPrincipal (et IIdentity) doivent être sérialisables, car elles peuvent aller vers d'autres AppDomains. La configuration d'une implémentation IPrincipal qui peut être facilement sérialisée et désérialisée dans AppDomains n'est pas facile et nécessite un soin particulier. Donc, sauf si vous avez besoin d'une vérification de rôle spéciale, je vous recommande d'utiliser GenericPrincipal/GenericIdentity. (voir plus ici: http://sontek.vox.com/library/post/re-iprincipal-iidentity-ihttpmodule-serializable.html)

Questions connexes