Sitecore多个自定义用户配置文件

时间:2016-05-20 08:25:09

标签: sitecore sitecore8

是否可以拥有多个自定义用户配置文件,以及如何设置Web配置文件以及如何在同一个sitecore实例下管理两个网站的自定义配置文件(相同的VS解决方案)?

我们有一个自定义用户个人资料,并且新要求来自同一个sitecore实例下的新网站,但第二个网站的新自定义用户。 在第二个网站的开发过程中,我们创建了第二个自定义用户配置文件,一切顺利,我们在web.config文件中更改了system.web / profile节点的“inherits”属性,指向第二个自定义使用配置文件,在开发过程中没问题。 / p>

现在的问题是只有一个用户个人资料可以登录网站: 如果我们将inherits属性设置为“Namespace.Website.NamespaceA.CustomProfileA,Namespace.Website”,那么profileA将能够登录到他们的域,如果我们将其设置为“Namespace.Website.NamespaceB.CustomProfileB,Namespace.Website” profileB将能够登录到其域,因为切换器将使用此域。

网络上的所有文章都描述了如何为一个自定义用户个人资料设置自定义用户个人资料,切换器和切换服务器,但我的案例没有示例。

谢谢, 斯尔詹

1 个答案:

答案 0 :(得分:2)

不幸的是,似乎没有一种干净的方法可以让API为您创建多个用户配置文件类。通常,您将通过Sitecore.Context.User.Profile获取用户个人资料。 Context类是静态的,初始化Profile属性的方法是私有的,因此无法插入额外的逻辑。

但是,您可以为配置文件创建包装类。从这样的基类开始:

public abstract class CustomProfileBase
{
    public CustomProfileBase(Sitecore.Security.UserProfile innerProfile)
    {
        Assert.ArgumentNotNull(innerProfile, nameof(innerProfile));
        InnerProfile = innerProfile;
    }

    public Sitecore.Security.UserProfile InnerProfile { get; protected set; }

    public virtual string GetCustomProperty(string propertyName)
    {
        return InnerProfile.GetCustomProperty(propertyName);
    }

    public virtual void SetCustomProperty(string propertyName, string value)
    {
        InnerProfile.SetCustomProperty(propertyName, value);
    }

    public virtual void Save()
    {
        InnerProfile.Save();
    }

    public virtual string Email
    {
        get { return InnerProfile.Email; }
        set { InnerProfile.Email = value; }
    }

    // Other members omitted for brevity
}

CustomProfileBase类将包含一个包含Sitecore.Security.UserProfile的每个公共成员的成员。然后,您将创建特定于站点的配置文件,如下所示:

public class SiteOneProfile : CustomProfileBase
{
    public SiteOneProfile(UserProfile innerProfile) : base(innerProfile)
    {
    }

    public string CustomPropertyOne
    {
        get { return GetCustomProperty("CustomPropertyOne"); }
        set { SetCustomProperty("CustomPropertyOne", value); }
    }
}

然后你可以从控制器或其他地方使用它,如下:

var profile = new SiteOneProfile(Sitecore.Context.User.Profile);
model.property = profile.CustomPropertyOne;

<强>更新

使用此方法时,您只需将configs中的inherits属性保留为默认值即可。此外,配置文件不应对登录能力产生影响。如果您仍然遇到问题,请更新您的问题,并详细说明登录时遇到的错误。