开发者

How do I run Commands with Elevated Privileges in Windows SharePoint Services 3.0?

开发者 https://www.devze.com 2022-12-20 02:30 出处:网络
I\'m using forms authentication to log in into windows sharepoint servevices 3.0 service. I need to elevate during anonymous access, rig开发者_StackOverflow中文版hts to add record to sharepoint portal

I'm using forms authentication to log in into windows sharepoint servevices 3.0 service. I need to elevate during anonymous access, rig开发者_StackOverflow中文版hts to add record to sharepoint portal list.

I found clue in msdn: http://msdn.microsoft.com/en-us/library/bb466220%28classic%29.aspx

But it doesn't work for me. :( It's still calling for user login and password.

Can anybody help me please?

Public Function AddUserAccountData() As String
        SPSecurity.RunWithElevatedPrivileges(AddressOf AddUserAccountDataToSPList)
        Return ""
    End Function

    Private Sub AddUserAccountDataToSPList()
        Dim oSharedConfig As SharedConfig = SharedConfig.Instance
        Dim sListName As String = oSharedConfig.oWebPartsOpt.UserOpt.AccountVerificationList.Name

        Using oSite As SPWeb = SPContext.Current.Web
            Dim oUserAccStatusList As SPList = oSite.Lists(sListName)

            oUserAccStatusList.Items.Add()
            Dim oSPListItem As SPListItem = oUserAccStatusList.Items.Add()

            oSPListItem("one") = _sUserLogin
            oSPListItem("two") = _sUserGuid
            oSPListItem("three") = False
            oSPListItem("four") = DateTime.Now

            oSPListItem.Update()
        End Using
    End Sub


When using RunWithElevatedPrivileges you shouldn't use SPContext.Current - it still has the old permissions. You should reopen your SPWeb to give it the right permissions. On your linked code this is done by the lines:

using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID))
using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))

Source:
RunWithElevatedPrivileges, watch out for the site context
Adding Items to a SharePoint List - from my blog, might help with your next problem.

Another note: you should not be writing Using oSite As SPWeb = SPContext.Current.Web. SPContext objects should not be disposed by you - they are shared between different components, so it may lead to other exceptions.
This is a common mistake - it could have been done better by the API in my opinion.


The line

oUserAccStatusList.Items.Add()

Looks a little off. Once you have a reference to the SPList you create a new listItem like you have in the following code, by calling the Items.Add on the listItem, set your properties and then call the Update method.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号