Alert.update() dando acesso negado no sharepoint?
-
14-11-2019 - |
Pergunta
Estou tentando adicionar alerta para logar usuário usando programação.Está dando "Acesso negado".Estou executando este código em SPSecurity.RunWithElevatedPrivileges(delegate()
.Verifiquei os direitos de identidade do pool de aplicativos em todos os lugares.Ele está no grupo Farm Admin, no grupo de conjunto de sites e no grupo de proprietários de banco de dados.Ainda recebendo o mesmo erro.Por que isso está acontecendo?
protected void ChkBx41_CheckedChanged(object sender, EventArgs e)
{
SPUser user = SPContext.Current.Web.CurrentUser;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPWeb eweb = new SPSite(url.Text).OpenWeb())
{
SPUser juser = null;
eweb.AllowUnsafeUpdates = true;
try
{
juser = eweb.AssociatedMemberGroup.Users[user.LoginName];
}
catch (Exception)
{
}
if (ChkBx41.Checked)
{
if (juser == null)
{
eweb.AssociatedMemberGroup.AddUser(eweb.EnsureUser(user.LoginName));
createalert(SPAlertFrequency.Daily, eweb, eweb.EnsureUser(user.LoginName),true);
}
RBList4.SelectedValue = "Daily";
RBList4.Enabled = true;
}
else
{
if (juser != null)
{
eweb.AssociatedMemberGroup.RemoveUser(juser);
removealert(eweb, juser);
RBList4.SelectedValue = null;
RBList4.Enabled = false;
}
}
}
});
}
public void createalert(SPAlertFrequency frq, SPWeb pweb, SPUser puser,bool mail)
{
try
{
pweb.AllowUnsafeUpdates = true;
foreach (SPList lst in pweb.Lists)
{
if (lst.BaseTemplate == SPListTemplateType.Announcements || lst.BaseTemplate == SPListTemplateType.DiscussionBoard || lst.BaseTemplate == SPListTemplateType.Events )
{
SPAlert alt = puser.Alerts.Add();
alt.AlertType = SPAlertType.List;
alt.List = lst;
alt.EventType = SPEventType.All;
alt.AlertFrequency = frq;
alt.Title = "SPE " + lst.Title;
if (frq != SPAlertFrequency.Immediate)
{
alt.AlertTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 15, 0, 0);
}
if (mail)
{
alt.Update(); // Access denied exception
}
else
{
alt.Update(false);
}
}
}
}
pweb.AllowUnsafeUpdates = false;
}
catch (Exception ee) {
throw ee.Message;
}
pweb.Dispose();
}
Solução
Não sei se esta é a solução.Você pode atualizar o eweb antes de prosseguir (Criar/Excluir alerta)
eweb.AssociatedMemberGroup.AddUser(eweb.EnsureUser(user.LoginName));
eweb.AssociatedMemberGroup.Update();
eweb.update();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow