通过代码在Sharepoint中添加TermSetGroup

时间:2012-03-15 08:53:49

标签: c# sharepoint permissions

我在创建TermSetGroup时遇到了问题。我的代码如下所示:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    //create new group if the groupName was not created.            
    Group group = termStore.Groups.Where(g => g.Name == groupName).Count() > 0 ? termStore.Groups[groupName] : termStore.CreateGroup(groupName);
    //create new term set if the termSetName was not created.
    TermSet termSet = group.TermSets.Where(s => s.Name == termSetName).Count() > 0 ? group.TermSets[termSetName] : group.CreateTermSet(termSetName);

    termSet.Owner = TermSetOwner;

    //add terms to term set.
    int lcid = CultureInfo.CurrentCulture.LCID;
    foreach (string termName in terms)
    {
        if (termSet.GetTerms(termName, false).Count <= 0)
        {
            termSet.CreateTerm(termName, lcid);
        }
    }
    termStore.CommitAll();
});

如果我在一个单独的控制台项目中使用它,这段代码实际上是可行的。它创建了我的Group,在本组中也创建了TermSet。但是,当我在工作流程中调用的Web服务中使用此代码时,它告诉我,我的用户没有权限创建组。 当组存在时,它可以工作,并且可以创建TermSet。

当我使用“RunWithElevatedPrivileges”时,怎么会这样? 启动工作流的用户是站点管理员。甚至Termstore Admin也是网站管理员...所以我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

问题是,您的网络服务运行的身份是什么? 因为这是将被假定的身份。只要您运行的是一个单独的进程而不是使用SPSecurity的IIS工作进程(w3wp).RunWithElevatedPrivileges将不会授予您系统帐户标识。

编辑:

SPSecurity.RunWithElevatedPrivileges(delegate() { 
using(SPSite elevatedSite = new SPSite(YOUR_SITEID))
{
    var elevatedTSession = new TaxonomySession(SPContext.Current.Site);
    var elevatedTermstore = elevatedTSession.TermStores[0]; //Or other if you have more
    //your code here, but using elevatedTermstore instead
}