一个SharePoint事件处理程序实例

[Update:呵呵,把代码缩进改了改……]

[重要UPDATE:今天实际在生产环境中测试,发现调用SPWeb的时候,一定要site.OpenWeb(WebID)才可以虚拟管理员身份,也就是说,直接site.OpenWeb()或properties.OpenWeb()是不行的!

另外,一定要在虚拟身份之后重新获得网站对象模型,才能使用提升到系统账户的安全性上下文。]

监控一个列表,一旦有新条目生成,就将这个条目的权限继承关系断开,并把发布者设置为只读。这样,所有新建数据都只有提交人只读可见,但系统帐号可以监控所有的。

只是个非常简单的例子,但可以暴露出很多值得注意的东西。

稍后将争取与了不起的Erucy一起写一篇详细介绍SharePoint新权限系统的文章。  

 

public   class  DemoHandler : SPItemEventReceiver  // 继承SharePoint数据条目事件监控类
{
    
public override void ItemAdded(SPItemEventProperties properties)  //重载ItemAdded函数,监控新建列表条目事件
    {
        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(properties.ListItemId);    //获得触发事件的列表条目 

                        
if (!item.HasUniqueRoleAssignments) item.BreakRoleInheritance(false);   //将此条目取消权限继承,如果是“false”,则将去除所有权限,只保留系统账户,如果是“true”,则将上一级权限复制过来。
                        SPUser user = web.Users.GetByID(properties.CurrentUserId);    //获得触发此事件的用户 

                        SPRoleAssignment ra 
= new SPRoleAssignment(web.EnsureUser(user.LoginName));   //生成一个新的角色分配
                        ra.RoleDefinitionBindings.Add(web.RoleDefinitions["读取"]);    //将此角色分配绑定“读取”权限级别
                        item.RoleAssignments.Add(ra);     //将此新权限绑定到列表条目上
                    }

                    
catch (Exception ee)
                    
{
                    }

                }
 

             }

        }

        );
    }

}

from: http://blog.joycode.com/choral/archive/2007/05/14/102528.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值