• Distribute Permission Instance (EventHandler)


    SharePoint的EventHandler主要有Web Level,List Level,List Item Level,Email几种。SharePoint的event handler主要是继承SPWebEventReceiver, SPEmailEventReceiver, SPListEventReceiver和SPItemEventReceiver类去实现其中相应的方法来完成我们的需求。

    ModifiedPermissions:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration;
    using System.IO;
    
    namespace Anson.EventReceiver
    {
        public class ModifiedPermission:SPItemEventReceiver
        {
    
            string strGroupName = "Home Owners";
            public override void ItemAdded(SPItemEventProperties properties)
            {
                SPWeb myWeb = null;
                SPSite mySite = null;            
                try
                {
                    SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        mySite = new SPSite(properties.ListItem.Web.Site.ID);
                        myWeb = mySite.AllWebs[properties.ListItem.Web.ID];
                        string currentUser = properties.ListItem.Web.CurrentUser.LoginName;
                        SPListItem myListItem = myWeb.Lists[properties.ListId].GetItemById(properties.ListItemId);
                        myWeb.AllowUnsafeUpdates = true;
                        myListItem.BreakRoleInheritance(true);
    
                        //Clear new listItem all the RoleAssignment 
                        while (myListItem.RoleAssignments.Count>0)
                        {
                            myListItem.RoleAssignments.Remove(0);
                        }
    
                        //Add Home Owner Group RoleAssignment
                        SPGroup oOwnerGroup=myWeb.SiteGroups[strGroupName];
                        if (oOwnerGroup!=null)
                        {
                            SPRoleAssignment oRoleGroup = new SPRoleAssignment(oOwnerGroup);
                            oRoleGroup.RoleDefinitionBindings.Add(myWeb.RoleDefinitions["Full Control"]);
                            myListItem.RoleAssignments.Add(oRoleGroup);
                        }
                        //Add  Author RoleAssignment
                        SPRoleAssignment authorRoleAssignment = new SPRoleAssignment(myWeb.SiteUsers[currentUser]);
                        authorRoleAssignment.RoleDefinitionBindings.Add(myWeb.RoleDefinitions["Full Control"]);
                        myListItem.RoleAssignments.Add(authorRoleAssignment);
    
                        myWeb.Update();
                        myWeb.AllowUnsafeUpdates = false;
                        
                    });
                }
                catch (Exception ex)
                {
    
                    log(ex.Message);
                }
                
            }
            public override void ItemDeleting(SPItemEventProperties properties)
            {
           
                try
                {
                    
                    string oCurrentUser = properties.ListItem.Web.CurrentUser.Name;
    
                    string authorName = properties.ListItem["Created By"].ToString();
                    authorName = authorName.Substring(authorName.IndexOf(";#") + 2);
                    if (oCurrentUser != authorName)
                    {
                        properties.Cancel = true;
                        properties.ErrorMessage = "You have not enough permission to delete!";
                    }
                }
                catch (Exception ex)
                {
                    log("ItemDeleting Method Error Message:"+ex.Message+DateTime.Now.ToString());
                }
            }
            private  void log(string ErrorMessage)
            {
                FileStream FS = null;
                StreamWriter SW = null;
                try
                {
                    SPSecurity.RunWithElevatedPrivileges
                        (
                        delegate
                        {
                            FS = File.Open("c:\\Error.txt", FileMode.Append);
                            SW = new StreamWriter(FS);
                            SW.Write(ErrorMessage+"\r\n");
                            SW.Close();
                            SW.Dispose();
                            FS.Close();
                            FS.Dispose();
                        }
                        );
                }
                catch
                {
                }
                finally
                {
                    SW = null;
                    FS = null;
                }
    
            }
    
        }
    }
    
    

    EventReceiveManger.cs ---这个是添加移动EventReceiver的管理类

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration;
    using System.IO;

    namespace Anson.EventReceiver
    {
    class EventReceiverManager
    {

    public static bool SetEventReceiver(SPList list,Type t,params SPEventReceiverType[] eventType)
    {

    try
    {
    string assembly = t.Assembly.FullName;
    string className = t.FullName;
    SPEventReceiverDefinitionCollection ERCollection = list.EventReceivers;
    SPEventReceiverDefinition def = null;
    for (int i = 0; i < ERCollection.Count; i++)
    {
    def = ERCollection[i];
    if (def.Class==className)
    {
    def.Delete();
    }
    }

    foreach (SPEventReceiverType ET in eventType)
    {
    list.EventReceivers.Add(ET, assembly, className);

    }
    list.Update();
    return true;

    }
    catch (Exception ex)
    {
    log("SetEventReceiverError:" + ex.Message + "\r\n");
    return false;
    }
    }

    public static bool RemoveEventReceivers(SPList list ,Type t)
    {
    try
    {
    string assembly = t.Assembly.FullName;
    string className = t.FullName;
    SPEventReceiverDefinitionCollection ERCollection = list.EventReceivers;
    SPEventReceiverDefinition def = null;
    for (int i = 0; i < ERCollection.Count; i++)
    {
    def = ERCollection[i];
    if (def.Class==className)
    {
    def.Delete();
    }
    }
    list.Update();
    return true;
    }
    catch (Exception ex)
    {

    log("RemoveEventReceivrs Method Error:"+ex.Message+"\r\n");
    return false;
    }

    }


    #region Log Method
    public static void log(string ErrorMessage)
    {
    FileStream FS = null;
    StreamWriter SW = null;
    try
    {
    SPSecurity.RunWithElevatedPrivileges
    (
    delegate
    {
    FS = File.Open("c:\\Error.txt", FileMode.Append);
    SW = new StreamWriter(FS);
    SW.Write(ErrorMessage + "\r\n");
    SW.Close();
    SW.Dispose();
    FS.Close();
    FS.Dispose();
    }
    );
    }
    catch
    {
    }
    finally
    {
    SW = null;
    FS = null;
    }
    }
    #endregion
    }

    }

    EventReceiverInstall.cs --这个是安装Feature的类

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration;
    
    
    namespace Anson.EventReceiver
    {
        class EventReceiverInstall:SPFeatureReceiver
        {
            string CustomListName = "AnsonList";
            public override void FeatureActivated(SPFeatureReceiverProperties properties)
            {
                SPSite mySite = properties.Feature.Parent as SPSite;
                SPList myList = mySite.RootWeb.Lists[CustomListName];
                SPEventReceiverType[] types={SPEventReceiverType.ItemDeleting,SPEventReceiverType.ItemAdded};
                if (myList!=null)
                {
                    EventReceiverManager.SetEventReceiver(myList,
                        typeof(ModifiedPermission), types);
                }
                else
                {
                    return;
                }
            }
    
            public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
            {
                SPSite mySite = properties.Feature.Parent as SPSite;
                SPList myList = mySite.RootWeb.Lists[CustomListName];
                if (myList != null)
                {
                    EventReceiverManager.RemoveEventReceivers(myList, typeof(ModifiedPermission));
                }
                else
                {
                    return;
                }
    
            }
    
            public override void FeatureInstalled(SPFeatureReceiverProperties properties)
            {
                
            }
    
            public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
            {
                
            }
        }
    }
    
    

    Feature.xml  -- 这个是Feature类似的结构,也有其他的结构写法,我习惯用这种

    <?xml version="1.0" encoding="utf-8"?>
    <Feature Scope="Site"
      Title="Anson.EventReceiver ModifedPermission"
      Id="615208F2-85DD-42c5-9590-1F9B0BC725B0" Description="It is Created by Ansom ,Use in the list of AnsonList"
      xmlns="http://schemas.microsoft.com/sharepoint/"
     Hidden="FALSE"
     Version="1.0.0.0"
     ReceiverAssembly="Anson.EventReceiver, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5abfd538ff01cc7c"
     ReceiverClass="Anson.EventReceiver.EventReceiverInstall">
    </Feature>
    

    部署:

    1. 强命名。

    2. DLL文件放到GAC

    3.重启IIS, command: iisreset

    3. 把含 Feature.xml文件的文件夹DistributePermission放到  12\TEMPLATE\FEATURES文件件里

    4.安装Feature, Stsadm Command: stsadm -o installfeature -name DistributePermission

    5.激活Feature 

  • 相关阅读:
    Java集合源码分析(一)
    EffectiveJava——请不要在代码中使用原生态类型
    Dubbo初探
    EffectiveJava——用函数对象表示策略
    EffectiveJava——类层次优于标签类
    notebook1.md
    NoteBook学习(二)-------- Zeppelin简介与安装
    Spark2.0学习(三)--------核心API
    Spark2.0学习(二)--------RDD详解
    Spark2.0学习(一)--------Spark简介
  • 原文地址:https://www.cnblogs.com/gzh4455/p/2195184.html
Copyright © 2020-2023  润新知