如何在SharePoint 2010上模拟我的帐户到服务帐户

时间:2014-11-06 21:13:58

标签: c# .net sharepoint sharepoint-2010 impersonation

当我在SharePoint 2010网站上以系统管理员身份登录时,我有一段代码正在执行而没有错误。但我在使用常规用户帐户执行相同操作时遇到问题。有人可以通过使用C#代码以其他SharePoint帐户(管理员帐户)身份登录来帮助我了解如何执行代码块。

示例:

Using(Domain,LoginID,Password)
{

//Execute Code

//logout as admin

} 

SharePoint 2010上的错误消息:

错误发生:System.UnauthorizedAccessException:拒绝访问路径'C:\ Program Files \ Common Files \ Microsoft Shared \ Web Server Extensions \ 14 \ template \ layouts \ Test \ Dev \ ABC.xlsx'。在System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)at System.IO.FileStream.Init(String path,FileMode mode,FileAccess access,Int32 rights,Boolean useRights,FileShare share,Int32 bufferSize,FileOptions options,SECURITY_ATTRIBUTES secAttrs) System.IO.FileStream..ctor上的System.IO.FileStream..ctor(String path,FileMode mode,FileAccess access,FileShare share,Int32 bufferSize,FileOptions options,String msgPath,Boolean bFromProxy)中的,String msgPath,Boolean bFromProxy) (String path,FileMode模式)位于App.Test.btnFileUpload_Click的System.Web.HttpPostedFile.SaveAs(String filename)(Object sender,EventArgs e)

代码示例:

if (fileUpload.HasFile)
{
    strTarget = Server.MapPath(fileUpload.FileName);
    string[] arrCheckExtension = strTarget.Split('.');
    if (arrCheckExtension.Length >= 2)
    {
        if (arrCheckExtension[1].ToString().Equals("xls") || arrCheckExtension[1].ToString().Equals("xlsx"))
        {
            fileUpload.SaveAs(strTarget);
            strConnForExcel = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;""", strTarget);
            strQueryForExcel = String.Format("select id from [{0}$]", "Test");
            OleDbDataAdapter adap = new OleDbDataAdapter(strQueryForExcel, strConnForExcel);
            ds = new DataSet();
            adap.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    if (strids == "")
                    {
                        strids += ds.Tables[0].Rows[i]["id"].ToString();
                    }
                    else
                    {
                        strids += "," + ds.Tables[0].Rows[i]["id"].ToString();
                    }
                }
                txtUpload.Text = strids;

            }
        }
        else
        {
            Response.Write("<script language='javascript'>alert('Please Select File with .xls or xlsx Extension');</script>");

        }
    }
}

1 个答案:

答案 0 :(得分:0)

发生错误是因为您尝试将Excel文件保存到程序文件中的layouts-folder。出于安全原因,不应将用户上载的文件存储在那里。

丢失Server.MapPath并将上传的文件保存到TEMP目录,或者保存到&#34; D:\ UploadedFiles&#34;代替。

您可以使用SPSecurity.RunWithElevatedPrivileges使用Web应用程序池标识运行代码。这可以帮助您将文件系统文件夹级别访问权限缩小到仅应用程序池帐户。

有关此功能的更多详细信息: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.runwithelevatedprivileges.aspx

上述页面中的一个例子:

SPSecurity.RunWithElevatedPrivileges(delegate()
          // Your code here
});

请注意,您必须在提升的块中创建内部的 SPSite和SPWeb对象才能使提升生效(如果需要)。