EventHandler中如何提升用户权限(模拟管理员权限)
2011-06-22 11:47
281 查看
不论是在工作流或是EventHandler中,我们经常希望模拟管理员权限,从而可以通过程序自定义列表项的权限。
在工作流中可以用如下代码来提升权限:(以下代码实现的功能是断开列表项所继承的权限,除管理员以外)
SPListItem item = workflowProperties.Item;
SPSecurity.RunWithElevatedPrivileges(delegate() //用此方法模拟管理员账户运行此事件处理程序
{
using (SPSite site = new SPSite(workflowProperties.SiteId)) //用此方法的话就不用dispose()了
{
using (SPWeb web = site.OpenWeb(workflowProperties.WebId)) //注意获得web的方法!!!
{
try
{
if (!item.HasUniqueRoleAssignments) item.BreakRoleInheritance(false); //将此条目取消权限继承,如果是“false”,则将去除所有权限,只保留系统账户,如果是“true”,则将上一级权限复制过来。
}
catch (Exception ex)
{
}
}
}
}
);
但是,在EventHandler中沿用以上代码,在调用列表项item实例进行操作时(如item.BreakRoleInheritance),会提示“没有权限”。根本原因是item实例不是在RunWithElevatedPrivileges代码段中实例化的。也就是说item必须在RunWithElevatedPrivileges中进行实例化,代码如下:
SPSecurity.RunWithElevatedPrivileges(delegate() //用此方法模拟管理员账户运行此事件处理程序
{
using (SPSite site = new SPSite(properties.SiteId)) //用此方法的话就不用dispose()了
{
using (SPWeb web = site.OpenWeb(properties.OpenWeb().ID)) //注意获得web的方法!!!
{
try
{
SPList list = web.Lists[properties.ListId];
SPListItem item = list.Items.GetItemById(Convert.ToInt32(properties.ListItemId));
//SPListItem item = properties.ListItem.ID;
//清空所有权限
if (!item.HasUniqueRoleAssignments) item.BreakRoleInheritance(false); //将此条目取消权限继承,如果是“false”,则将去除所有权限,只保留系统账户,如果是“true”,则将上一级权限复制过来。
}
catch (Exception ex)
{
}
}
}
}
);
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/RainyLin/archive/2008/12/17/3540102.aspx
在工作流中可以用如下代码来提升权限:(以下代码实现的功能是断开列表项所继承的权限,除管理员以外)
SPListItem item = workflowProperties.Item;
SPSecurity.RunWithElevatedPrivileges(delegate() //用此方法模拟管理员账户运行此事件处理程序
{
using (SPSite site = new SPSite(workflowProperties.SiteId)) //用此方法的话就不用dispose()了
{
using (SPWeb web = site.OpenWeb(workflowProperties.WebId)) //注意获得web的方法!!!
{
try
{
if (!item.HasUniqueRoleAssignments) item.BreakRoleInheritance(false); //将此条目取消权限继承,如果是“false”,则将去除所有权限,只保留系统账户,如果是“true”,则将上一级权限复制过来。
}
catch (Exception ex)
{
}
}
}
}
);
但是,在EventHandler中沿用以上代码,在调用列表项item实例进行操作时(如item.BreakRoleInheritance),会提示“没有权限”。根本原因是item实例不是在RunWithElevatedPrivileges代码段中实例化的。也就是说item必须在RunWithElevatedPrivileges中进行实例化,代码如下:
SPSecurity.RunWithElevatedPrivileges(delegate() //用此方法模拟管理员账户运行此事件处理程序
{
using (SPSite site = new SPSite(properties.SiteId)) //用此方法的话就不用dispose()了
{
using (SPWeb web = site.OpenWeb(properties.OpenWeb().ID)) //注意获得web的方法!!!
{
try
{
SPList list = web.Lists[properties.ListId];
SPListItem item = list.Items.GetItemById(Convert.ToInt32(properties.ListItemId));
//SPListItem item = properties.ListItem.ID;
//清空所有权限
if (!item.HasUniqueRoleAssignments) item.BreakRoleInheritance(false); //将此条目取消权限继承,如果是“false”,则将去除所有权限,只保留系统账户,如果是“true”,则将上一级权限复制过来。
}
catch (Exception ex)
{
}
}
}
}
);
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/RainyLin/archive/2008/12/17/3540102.aspx
相关文章推荐
- EventHandler中如何提升用户权限(模拟管理员权限)
- EventHandler中如何提升用户权限(模拟管理员权限)
- ASP.NET中模拟管理员用户提升权限
- moss如何提升权限或者模拟用户
- 利用ShellExecuteEx手动提升用户特权,以管理员权限来运行程序。win7会有UAC弹窗
- 为域用户提升本机管理员权限
- 如何在不提升用户权限的情况下,使普通用户执行xp_cmdshell存储过程2008-11-26 14:09:29SQL Server 2005 及之后的版本
- [转]通过SQL Server 用户来添加Windows帐户并提升为管理员权限
- WIN10系统如何完全获取用户管理员权限
- 为域用户提升本机管理员权限
- Win7如何提升为管理员权限,如何开机启动需要管理员权限的程序,解决win7开机不能自动运行的问题等
- Win7如何提升为管理员权限,如何开机启动需要管理员权限的程序,解决win7开机不能自动运行的问题等
- 如何在不提升用户权限的情况下,使普通用户执行xp_cmdshell存储过程
- win8.1系统如何提升账户管理员权限,继而系统永久激活
- 如何在 ASP.NET 应用程序中实现模拟用户身份(在ASP.NET中以管理员身份运行网站)
- [转]如何在不提升用户权限的情况下,使普通用户执行xp_cmdshell存储过程
- 如何悄悄地提升MySQL用户权限
- 如何让普通用户运行需要管理员权限的应用程序
- windows7中如何查看用户是否拥有管理员权限
- VC如何将自身进程提升至管理员权限