最近正在研究MOSS列表的权限,基于一个任务列表,在新建一个任务的时候自动为被分配人员分配查看、编辑当前任务的权限。解决这个问题使用了moos的EventHandler,一切都搞定后,使用管理员测试感觉还不错,结果换了用户以后发现代码不好使了,于是开始寻找原因(由于用户权限的问题),从网上查了很多关于MOSS提升的文章,又学到了不少知识,哈哈。下面是我学习过程中的一些记录:
1、moss的权限提升是将需要具有管理员权限的代码部分放入到如下代码块中运行:
Code
SPSecurity.RunWithElevatedPrivileges(delegate()
{
//需要模拟管理员身份来执行的代码段
});
2、权限提升实际模拟的用户是SHAREPOINT\system这个用户,在站点中要确认SHAREPOINT\system这个用户要有足够的权限,否则模拟此用户的程序段执行也会出现没有权限的错误。
3、需要权限提升的代码一定不可以包含程序上下文的信息,否则执行的时候也会出现没有权限的错误,例如下面两个例子:
Code
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPWeb currentWeb = SPContext.Current.Web;
currentWeb.BreakRoleInheritance(true);//这段代码在执行时如果用户没有权限,则会出现错误。
}
//下面这样就不会出现错误。
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPSite site = new SPSite(SPContext.Current.Web.Site.Url);//使用上下文对象得到SPSite的url,并new出一个SPSite对象,这样就脱离了上下文的信息。
SPWeb currentWeb = site.AllWebs[SPContext.Current.Web.Name];
currentWeb.BreakRoleInheritance(true);//这段代码在执行时如果用户没有权限,则会出现错误。
}