EventHandler中如何提升用户权限(模拟管理员权限)
来源:互联网 发布:aics6 mac 中文破解版 编辑:程序博客网 时间:2024/05/16 08:08
EventHandler中如何提升用户权限(模拟管理员权限)
不论是在工作流或是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)
{
{
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)
{
{
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)
{
}
}
}
}
}
);
}
);
- EventHandler中如何提升用户权限(模拟管理员权限)
- EventHandler中如何提升用户权限(模拟管理员权限)
- MOSS模拟管理员权限,权限提升
- MFC中提升至管理员权限
- VC中程序提升管理员权限
- 提升管理员权限
- linux临时提升管理员权限(sudo方法)
- 提升用户权限
- win7中如何获取管理员权限
- 2000/xp中如何取得管理员权限(本机上)
- WIN7系统只有一个标准用户权限(如何提升到管理权限)
- VC程序提升管理员权限
- VC++程序提升管理员权限
- 命令行自动提升管理员权限
- VC程序提升管理员权限
- VC程序提升管理员权限
- 如何在cmd中启用管理员权限
- 如何在bat中请求管理员权限
- 用JAVA编程C/S聊天程序
- oracle分页
- VB数据库连接recordset open的语法
- log4j配置应用
- VC免费界面库GuiToolKit的编译
- EventHandler中如何提升用户权限(模拟管理员权限)
- MYSQL ADMINISTRATOR 1.2介绍
- VCL已死,RAD已死(4)
- 使用ifstream和getline读取文件内容
- 主板一长声两短声是哪的毛病?
- C++内存分配
- oracle,sqlServer,MySQL分页
- log4j应用配置2
- 线程基础知识——Windows核心编程学习手札系列之六