Thứ Sáu, 12 tháng 6, 2009

SharePoint EventHandler: Set Item Level Permission Programmatically

Sometime, we need to set item permission dynamically for SharePoint List item or SharePoint Document. To do that, we create Item event handler then implement extension method for setting permission to the item.

the code as following:

   1: public static SPListItem SetItemLevelPermission(this SPListItem listItem, SPPrincipal userOrGroup, SPRoleType roleType)
   2:         {
   3:             SPListItem item = listItem;
   4:             Guid listId = listItem.ParentList.ID;
   5:             Guid itemId = listItem.UniqueId;
   6:             SPUserToken token = item.Web.Site.SystemAccount.UserToken;
   7:             SPSecurity.RunWithElevatedPrivileges(
   8:                 delegate()
   9:                 {
  10:                     using (SPSite site = new SPSite(item.Web.Site.ID, token))
  11:                     {
  12:                         site.AllowUnsafeUpdates = true;
  13:                         using (SPWeb web = site.OpenWeb(item.Web.ID))
  14:                         {
  15:                             web.AllowUnsafeUpdates = true;
  16:                             SPWebApplication webApp = web.Site.WebApplication;
  17:                             webApp.FormDigestSettings.Enabled = false;
  18:                             item = web.Lists[listId].Items[itemId];
  19:                             item.BreakRoleInheritance(false);
  20:                             web.AllowUnsafeUpdates = true; 
  21:  
  22:                             SPRoleDefinition roleDefinition = web.RoleDefinitions.GetByType(roleType);
  23:                             SPRoleAssignment roleAssignment; 
  24:  
  25:                             roleAssignment = new SPRoleAssignment(userOrGroup);
  26:                             roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
  27:                             item.RoleAssignments.Add(roleAssignment); 
  28:  
  29:                             item.Update(); // call this function before finished 
  30:                             webApp.FormDigestSettings.Enabled = true;
  31:                             web.AllowUnsafeUpdates = false;
  32:                         }
  33:                     }
  34:                 }
  35:                 );
  36:             return item;
  37:         }



In the ItemAdding or ItemAdded Event, We use:






   1: public override void ItemAdded(SPItemEventProperties properties)
   2:        {
   3:            SPWeb currentWeb = properties.ListItem.Web;
   4:            SPUser currentUser = currentWeb.CurrentUser;
   5:            properties.ListItem.SetItemLevelPermission(currentUser, SPRoleType.Contributor);
   6:        }

Không có nhận xét nào:

Đăng nhận xét