2010-11-22 5 views

Antwort

0

Zuerst werden Sie eine Eventreceiver auf Ihre Funktion und dann in XML hinzufügen, um Ihre Funktion ist ein ReceiverClass hinzuzufügen, wie folgt aus:

<Feature Id="f68efad8-ea0a-42a2-9994-db3b74aa67f8" 
     Title="My features title" 
     Description="Blah blah blah" 
     Version="12.0.0.0" 
     Hidden="FALSE" 
     Scope="Web" 
     DefaultResourceFile="core" 
     ReceiverAssembly="MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c4f34f956cd0552b" 
     ReceiverClass="MyProject.FeatureCode.EventHandler" <!-- This is where you set the EventReceiver --> 
     xmlns="http://schemas.microsoft.com/sharepoint/"> 

Eventhandler ist die Eventreceiver wenn Sie Funktion aktiviert ist.

Mein Beispiel
Zunächst, mein Eventreceiver:

public override void FeatureActivated(SPFeatureReceiverProperties properties) 
    { 
     var assembly = typeof(PermissionHandler).Assembly.ToString(); 
     var classList = typeof(PermissionHandler).FullName; 

     var web = SPContext.Current.Web; 
     web.AllowUnsafeUpdates = true; 
     try 
     { 
      var list = web.Lists["MyList"]; 
      list.EventReceivers.Add(SPEventReceiverType.ItemAdded, assembly, classList); 
      list.EventReceivers.Add(SPEventReceiverType.ItemUpdated, assembly, classList); 
     } 
     catch (Exception ex) 
     { 
      EventLogger.LogError("Sample feature failed to run.", this, ex); 
     } 

    } 

Im obigen Beispiel I in MyList einige Berechtigungen auf die Elemente hinzufügen möchten. Wie Sie sehen können, mache ich 2 Variablen, die der Typ ist (PermissionHandler), eine öffentliche Klasse, die ich erstellt habe, um die Aufgabe zu erledigen.
Ich habe 5 Einträge zur Liste hinzugefügt, bevor ich diese Funktion aktiviere. Daher möchte ich, dass die bereits vorhandenen Objekte auch die Berechtigungen erhalten, die ich für die neuen Objekte einstelle. Dies ist

, wie ich es tun:

private void updateItemPermissions(SPItemEventProperties properties) 
    { 
     DisableEventFiring(); 
     SPListItem listItem = properties.ListItem; 
     SPSecurity.RunWithElevatedPrivileges(() => 
     { 
      SPSite site = new SPSite(listItem.ParentList.ParentWeb.Site.ID); 
      SPWeb web = site.OpenWeb(listItem.ParentList.ParentWeb.ID); 
      SPList list = web.Lists[listItem.ParentList.ID]; 
      SPListItem item = list.Items.GetItemById(properties.ListItem.ID); 

      item.BreakRoleInheritance(true); 
      if (item.RoleAssignments.Count > 0) 
      { 
       for (var i = item.RoleAssignments.Count - 1; i >= 0; i--) 
         item.RoleAssignments.Remove(i); 
      } 

      var group = item.Web.Site.RootWeb.Groups["Visitors"]; 
      AddPermissions(item, web, SPRoleType.Reader, group); 

     }); 

     EnableEventFiring(); 
    } 

    private static void AddPermissions(SPListItem curItem, SPWeb web, SPRoleType roleType, SPPrincipal principal) 
    { 
     SPRoleDefinition roleDefinition = web.RoleDefinitions.GetByType(roleType); 
     SPRoleAssignment roleAssignment = new SPRoleAssignment(principal); 
     roleAssignment.RoleDefinitionBindings.Add(roleDefinition); 
     curItem.RoleAssignments.Add(roleAssignment); 
     curItem.Update(); 
    } 



Ich hoffe, das hilft Sie :)

Verwandte Themen