今天在使用 SPSecurity.RunWithElevatedPrivileges(delegate(){}); 来提升权限时,通过当前登录人的帐号判断当前登录人是否在某一个权限组里面,出现“拒绝访问”
一开始的代码如下:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPWeb site = SPContext.Current.Web)
{
LogHandler1("提升开始");
SPUser user = site.CurrentUser;
SPGroup group = site.SiteGroups["办公用品管理"];
string adCode = user.LoginName;
LogHandler1("当前登录人:" + adCode);
foreach (SPUser sUser in group.Users)
{
if (adCode.ToLower() == sUser.ToString().ToLower())
{
TextBox1.Text = "这个人有权限!";
}
}
}
});
修改了好多次代码都没有解决。后来查了一下资料,因为获取一个权限组只有网站集团管理员才可以取到。在使用SPSecurity.RunWithElevatedPrivileges权限提升的代码里头,必须实例化SPSite,SPWeb对象,而不能使用Microsoft.SharePoint.SPContext.Current属性获得对象,因为那些对象是以当前用户的安全上下文创建的。后来又修改了代码,代码如下:
bool bRet = false;
try
{
LogHandler1("开始");
SPSite spSite = SPContext.Current.Site;
SPWeb spWeb = SPContext.Current.Web;
SPUser user = spWeb.CurrentUser;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite spSiteNew = new SPSite(spSite.ID))
{
using (SPWeb spWebNew = spSiteNew.OpenWeb(spWeb.ID))
{
SPGroup group = spWebNew.SiteGroups["办公用品管理"];
string adCode = user.LoginName;
LogHandler1("当前登录人:" + adCode);
foreach (SPUser sUser in group.Users)
{
if (adCode.ToLower() == sUser.ToString().ToLower())
{
bRet = true;
}
}
}
}
});
}
catch (Exception ex)
{
LogHandler(ex);
}
return bRet;
说明:上面的代码是以网站集最高权限用户来执行,所以可以进行创建。