我在创建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也是网站管理员...所以我在这里做错了什么?
答案 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
}