J'ai une application .Net qui utilise un nombre arbitraire de fournisseurs d'appartenance. Je ne vais pas entrer dans les raisons, mais je ne veux pas qu'ils soient préconfigurés, mais je veux les créer et les ajouter par programmation. Est-ce qu'il y a un moyen de faire ça? Je n'ai aucun problème à créer les fournisseurs, mais Membership.Providers est en lecture seule, donc je ne peux pas les ajouter.Ajout d'un fournisseur d'appartenance par programme
Répondre
Un hack facile consiste à créer un fournisseur d'appartenance personnalisé (en tant que wrapper) en premier et à l'accrocher dans web.config. Ensuite, vous implémentez ce fournisseur pour pouvoir authentifier les utilisateurs par rapport à une liste de fournisseurs d'appartenances réels.
Étant donné que l'emballage vous appartient, vous n'êtes limité que par votre imagination.
tardive, réponse tardive, mais vous pouvez utiliser la réflexion:
public static class ProviderUtil
{
static private FieldInfo providerCollectionReadOnlyField;
static ProviderUtil()
{
Type t = typeof(ProviderCollection);
providerCollectionReadOnlyField = t.GetField("_ReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
}
static public void AddTo(this ProviderBase provider, ProviderCollection pc)
{
bool prevValue = (bool)providerCollectionReadOnlyField.GetValue(pc);
if (prevValue)
providerCollectionReadOnlyField.SetValue(pc, false);
pc.Add(provider);
if (prevValue)
providerCollectionReadOnlyField.SetValue(pc, true);
}
}
Ensuite, dans votre code, vous pouvez faire quelque chose comme ceci:
MyMembershipProvider provider = new MyMembershipProvider();
NameValueCollection config = new NameValueCollection();
// Configure your provider here. For example,
config["username"] = "myUsername";
config["password"] = "myPassword";
provider.Initialize("MyProvider", config);
// Add your provider to the membership provider list
provider.AddTo(Membership.Providers);
Il est un hack, parce que nous sommes en utilisant la réflexion pour définir le champ privé "_ReadOnly", mais cela semble fonctionner.
Voici un post sur cette question: http://elegantcode.com/2008/04/17/testing-a-membership-provider/
Une autre bonne après: http://www.endswithsaurus.com/2010/03/inserting-membershipprovider-into.html
Portez une attention particulière aux mises en garde de l'utilisation _ReadOnly dans ces messages, que vous aurez envie de peser les inconvénients de manipuler une collection en lecture seule par rapport aux exigences de votre projet et ce que vous essayez d'accomplir.
Cordialement,
-Doug
Je sais que déjà hors de propos, mais pour les futurs lecteurs, je vais ajouter ma solution à un problème similaire. J'ai voulu créer un fournisseur qui ajouterait des fonctionnalités sur n'importe quel autre fournisseur (modèle de décorateur), donc je voulais ajouter le fournisseur interne à la collection des fournisseurs (pour celui au-dessus de moi - ça ne marchera pas, parce que si le fournisseur n'est pas dans la collection de fournisseurs - il ne sera pas capable de créer des utilisateurs).
Je n'ai pas aimé la solution de réflexion pour deux raisons:
La plus évidente - il casse l'encapsulation. Le deuxième - le code devrait fonctionner sans autorisation de réflexion, sinon, n'importe quel morceau de code serait capable d'ajouter son propre fournisseur - donc toute sécurité serait compromise.
La solution (simple) que j'ai trouvée consistait à enregistrer les deux fournisseurs dans web.config, à définir le fournisseur par défaut sur mon fournisseur et à charger le second fournisseur à l'exécution à partir de la collection des fournisseurs.
Pour la première question - si vous pouvez savoir quels fournisseurs vous aurez besoin avant l'exécution, il serait préférable de les enregistrer dans web.config, et peut-être modifier leurs propriétés en cours d'exécution.
Une autre solution (qui serait encore "correcte", mais lente) serait de déléguer le contrôle de sécurité à un petit exe, de changer son application.config, exécutez-le et renvoyez le résultat sous la forme d'une sortie (votre fournisseur peut le faire). DPAPI peut fournir la sécurité pour la livraison de mot de passe.
- 1. Fournisseur d'installation Bouncycastle par programme
- 2. Entity Framework - Ajout par programme de FunctionImportMapping
- 3. Configuration du fournisseur de rôles ASP.Net par programme
- 4. connexion par programme avec le fournisseur d'appartenance .net
- 5. Ajout de tâches par programme dans la taskList dans sharepoint
- 6. Ajout de métadonnées personnalisées à un site d'équipe par programme
- 7. Ajout d'un hôte par programme (résolution de noms sous Windows)
- 8. Accès par programme/ajout/modification de sonneries de contacts
- 9. Ajout par programme d'autorisations de sécurité aux fichiers en C#
- 10. Ajout d'un groupe à l'aide du fournisseur ADSI PowerShell
- 11. Ajout de commandes GUI au programme externe
- 12. Ajout par programme d'un fichier Javascript au contrôle utilisateur dans .net
- 13. Ajout par programme et global d'une extension de comportement de point de terminaison client WCF personnalisée
- 14. Ajout par programme d'un appel de service à l'application SharePoint Call Center
- 15. Ajout d'un bouton de barre d'outils par programme dans le client Lotus Notes R7?
- 16. Appelez par programme @Controller
- 17. Démarrer par programme UserControlTestContainer.exe
- 18. Imprimer FixedDocument par programme
- 19. Recherche google par programme
- 20. Tri DataGridView par programme
- 21. Créer TableLayout par programme
- 22. Tri JTable par programme
- 23. Comment réinitialiser le fournisseur de ressources de globalisation sur le fournisseur par défaut resx
- 24. Fournisseur de rôle ASP.NET vs fournisseur d'appartenance
- 25. Comment supprimer un raccourci annoncé par programme?
- 26. fournisseur d'appartenance
- 27. Ajout de paramètres pour un programme au lancement
- 28. Ajout d'un élément SelectListItem par défaut
- 29. Comment puis-je savoir par programme si Microsoft.Jet.OLEDB.4.0 est un fournisseur valide sur un ordinateur client?
- 30. Ajout/suppression par programmation d'onglets sur wxNotebook par PageText
Très utile. J'utilise ceci pour des tests unitaires sur un fournisseur d'appartenance personnalisé. – jsalwen
Ceci est un hack sale, sale ... qui fonctionne, malgré ma profonde honte pour l'utiliser. Merci pour ça. – Deane