Question

J'essaie d'ajouter une alerte pour la relance des utilisateurs à l'aide de la programmation. Il donne "Accès refusé". J'exécute ce code sous SPSecurity.RunWithElevatedPrivileges(delegate(). J'ai vérifié les droits d'identité du pool d'application à tous les endroits. Il fait partie du groupe d'administration agricole, du groupe de collecte de sites et du groupe de propriétaires de bases de données. Recevoir toujours la même erreur. Pourquoi cela se passe-t-il?

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();
    }
Était-ce utile?

La solution

Je ne sais pas si c'est la solution. Pouvez-vous s'il vous plaît mettre à jour EWEB avant d'aller de l'avant (créer / supprimer l'alerte)

eweb.AssociatedMemberGroup.AddUser(eweb.EnsureUser(user.LoginName));
eweb.AssociatedMemberGroup.Update();
eweb.update();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top