2012-02-27 6 views
0

J'ai un système hérité (sitecore 6.1) qui a déjà un fournisseur de profil en plave comme profil par défaut pour la section admin.Fournisseur de profil d'appel par nom dans le profil config

Maintenant, j'ai besoin d'implémenter un autre fournisseur de profil SQL personnalisé (dans une table différente) pour un utilisateur normal.

Mais ma question est Comment le système de dose sait quel fournisseur de profil utiliser dans le code?

Y at-il quelque chose que je peux faire la même que:

System.Web.Security.Membership.Providers[providerString]; 

Alors que je peux appeler personnalisé fournisseur de profil dans mon code en conséquence.

Ou quelle serait la meilleure pratique dans ce cas.

J'ai gaspillé comme 1 heure essaye de passer par docs de sitecore, mais pas beaucoup disponible là.

+0

Voir ce pour plus de détails comment brancher plusieurs fournisseurs de sécurité dans Sitecore: http://sdn.sitecore.net/Articles/Security/Low_level_Sitecore_Security_and_Custom_Providers.aspx –

+0

@YanSklyarenko merci pour le lien. Y at-il un exemple de code que je peux référencer. merci –

+1

Il existe un projet source commun appelé YAFIntegration (Yet Another Forum integration). Il implémente l'ensemble des fournisseurs, et vous pouvez l'utiliser comme un exemple (bien que non trivial). Voici le lien: http://trac.sitecore.net/YAFIntegration –

Répondre

0

Voici un code que j'ai récemment fait pour configurer des éléments de profil personnalisés pour un client à l'aide du gestionnaire de campagnes de courrier électronique. Bien que ce code utilise certaines classes spécifiques à ECM, il crée un nouvel utilisateur, initialise une classe de profil, puis affecte ce profil au nouvel utilisateur. Ensuite, il définit certaines propriétés personnalisées pour l'utilisateur qui vient d'être créé. Il vous montre comment appeler le profil en fonction de l'utilisateur et lui affecter un profil à utiliser pour cet utilisateur. Cela pourrait aider ou peut-être aider quelqu'un d'autre.

public static void Process(List<Subscriber> userItems, Item targetAudienceDefinitionItem) 
    { 
     foreach (Subscriber user in userItems) 
     { 
      // you can also just pass it the id of the target audience as a string 
      Sitecore.Modules.EmailCampaign.TargetAudienceBase target = Sitecore.Modules.EmailCampaign.TargetAudience.FromItem(targetAudienceDefinitionItem); 

      string campaignname = target.ManagerRoot.Settings.CommonDomain; 
      string realUsername = campaignname + "\\" + user.UserName; 

      using (new SecurityDisabler()) 
      { 
       User newUser; 
       if (!Sitecore.Security.Accounts.User.Exists(realUsername)) 
       { 
        // create a new user and assign it to the email domain specified in the manager root item 
        newUser = Sitecore.Security.Accounts.User.Create(campaignname + "\\" + user.UserName, System.Web.Security.Membership.GeneratePassword(8,1)); 
       } 
       else 
        // get back the existing user 
        newUser = User.FromName(realUsername, false); 

       // get back the current user profile 
       UserProfile subscriber = newUser.Profile; 

       // reset the profile to be the profile specified in the manager root 
       subscriber.ProfileItemId = target.ManagerRoot.Settings.SubscriberProfile; 
       subscriber.Save(); 

       // built in properties are set like this 
       subscriber.Email = user.Email; 

       // set custom property value 
       subscriber["Address"] = user.Address; 


       // or long method 
       subscriber.SetCustomProperty("Address", user.Address); 

       subscriber.Save(); 
       // now subscribe the user to the target audience subscriber list 
       target.Subscribe(Contact.FromName(newUser.Name)); 

      } 
     } 
    } 
Questions connexes