SharePoint 中列表的用户组权限

我们的目的就是利用SharePoint 中列表的权限,列表中各记录根据自己的用户组权限,仅供各用户组所属用户访问。
1、在添加列表后,设置列表权限,把其它的用户组全部删除,只保留自己所需要的用户组。
2、使用VS2005 ,添加普通的类,引用C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI\Microsoft.SharePoint.dll。继承SPItemEventReceiver类,重写AddedItem方法。

 

public   override   void  ItemAdded(SPItemEventProperties properties)
        {
            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);
                            
// 将此条目取消权限继承,如果是“false”,则将去除所有权限,只保留系统账户,如果是“true”,则将上一级权限复制过来。
                             if  ( ! item.HasUniqueRoleAssignments)
                            {
                                item.BreakRoleInheritance(
false );
                            }
                            
// 权限定义
                            SPRoleDefinition RoleDefinition  =  web.RoleDefinitions.GetByType(SPRoleType.Contributor);
                            
// 获取用户所在组
                             string  groupName  =  IsInGroup(web, properties.UserLoginName.Split( ' : ' )[ 1 ]);
                            writetxt(groupName 
+ " ab " );
                            SPMember mem 
=  web.SiteGroups[groupName];
                            SPPrincipal sp 
=  (SPPrincipal)mem;
                            SPRoleAssignment ra 
=   new  SPRoleAssignment(sp);
                            
// 将此角色分配绑定权限级别
                            ra.RoleDefinitionBindings.Add(RoleDefinition);
                            
// 将此新权限绑定到列表条目上
                            item.RoleAssignments.Add(ra);
                            item.Update();
                        }
                        
catch  (Exception ee)
                        {
                            writetxt(ee.ToString());
                        }
                    }
 
                }
            }
            );
        }

 


这个类必须是加密钥,利用VS2005命令提示行生成SNK文件,在工程文件AssemblyInfo.cs里面加上
[assembly: AssemblyDelaySign(false)]     //是否要延迟签名 false:不延迟签名 true:延迟签名
[assembly: AssemblyKeyFile("roadlist.snk")]    //密钥文件的路径
然后生成DLL文件,利用gacutil/I file.dll命令方式将DLL文件加入GAC。
 
然后建一个控制台程序,引用C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI\Microsoft.SharePoint.dll。
 
在主程序中加入出境
//根据网站集的Url得到网站集对象
SPSite site = new SPSite("http://sharepointsever:60000");
SPList list = web.Lists["列表名称"];
string asmName = "2000EventHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=79be99334218e9f4";//程序集名称
string className = "_000EventHandler.DemoEventHandler";//程序集中的类名
list.EventReceivers.Add(SPEventReceiverType.ItemAdded, asmName, className);
此时如果不出错,就表示已经把这个自定义事件放到当前的列表中了。此时各自的用户组只能访问用户组中的记录了。


转:http://blog.csdn.net/boy20000/archive/2008/04/24/2321266.aspx

你可能感兴趣的:(SharePoint)