protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { try { PermissionRequest myResetRequest = new PermissionRequest(); myResetRequest.RequestType = PermissionActionType.Reset; myResetRequest.ItemId = this.ListItem; myResetRequest.ListID = new Guid(this.ListId); myResetRequest.SiteID = this.__Context.Site.ID; myResetRequest.WebID = this.__Context.Web.ID; WorkflowEnvironment.WorkBatch.Add(PermissionsService.Instance, myResetRequest); //SPSecurity.RunWithElevatedPrivileges(delegate() // { // using (SPSite site = new SPSite(__Context.Site.ID)) // { // using (SPWeb web = site.AllWebs[__Context.Web.ID]) // { // SPList List = web.Lists[new Guid(this.ListId)]; // SPListItem listItem = List.GetItemById(this.ListItem); // if (listItem.HasUniqueRoleAssignments) // { // listItem.ResetRoleInheritance(); // listItem.SystemUpdate(); // } // } // } // }); } catch (Exception e) { Common.LogExceptionToWorkflowHistory(e, executionContext, this.WorkflowInstanceId); throw; } return base.Execute(executionContext); }
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { try { PermissionRequest myRevokeRequest = new PermissionRequest(); myRevokeRequest.RequestType = PermissionActionType.Revoke; myRevokeRequest.ItemId = this.ListItem; myRevokeRequest.ListID = new Guid(this.ListId); myRevokeRequest.SiteID = this.__Context.Site.ID; myRevokeRequest.WebID = this.__Context.Web.ID; myRevokeRequest.User = this.User; WorkflowEnvironment.WorkBatch.Add(PermissionsService.Instance, myRevokeRequest); //SPSecurity.RunWithElevatedPrivileges(delegate() //{ // using (SPSite site = new SPSite(__Context.Site.ID)) // { // using (SPWeb web = site.AllWebs[__Context.Web.ID]) // { // SPList list = web.Lists[new Guid(ListId)]; // SPListItem listItem = list.Items.GetItemById(ListItem); // Common.RemoveListItemPermissionEntry(listItem, User, true); // listItem.Update(); // } // } //}); } catch (Exception e) { Common.LogExceptionToWorkflowHistory(e, executionContext, this.WorkflowInstanceId); throw; } return ActivityExecutionStatus.Closed; }
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { try { PermissionRequest myGrantRequest = new PermissionRequest(); myGrantRequest.RequestType = PermissionActionType.Grant; myGrantRequest.ItemId = this.ListItem; myGrantRequest.ListID = new Guid(this.ListId); myGrantRequest.SiteID = this.__Context.Site.ID; myGrantRequest.WebID = this.__Context.Web.ID; myGrantRequest.User = this.UserName; myGrantRequest.PermissionLevel = Common.ProcessStringField(executionContext, this.PermissionLevel); WorkflowEnvironment.WorkBatch.Add(PermissionsService.Instance, myGrantRequest); //run in context of sharpoints system account because user might not have permissions to grant permisions (Beware of the security risk here) //SPSecurity.RunWithElevatedPrivileges(delegate() // { // using (SPSite site = new SPSite(__Context.Site.ID)) // { // using (SPWeb web = site.AllWebs[__Context.Web.ID]) // { // SPList List = web.Lists[new Guid(this.ListId)]; // SPListItem listItem = List.GetItemById(this.ListItem); // string permission = Common.ProcessStringField(executionContext, this.PermissionLevel); // if (!Common.IsUserRoleAssigned(__Context, this.ListId, this.ListItem, permission, this.UserName)) // { // if (!listItem.HasUniqueRoleAssignments) // { // listItem.BreakRoleInheritance(true); // } // Common.RemoveListItemLimitedPermissions(listItem); // Common.RemoveListItemPermissionEntry(listItem, this.UserName, false); // listItem = Common.SetItemPermissions(web, listItem, permission, this.UserName); // listItem.Update(); // } // } // } // }); } catch (Exception e) { Common.LogExceptionToWorkflowHistory(e, executionContext, this.WorkflowInstanceId); throw; } return ActivityExecutionStatus.Closed; }
/// <summary> /// processes grant permission request /// </summary> /// <param name="pr"></param> private void ProcessGrantRequest(PermissionRequest pr) { int retryCount = 0; SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(pr.SiteID)) { using (SPWeb web = site.AllWebs[pr.WebID]) { string permission = pr.PermissionLevel; if (!Common.IsUserRoleAssigned(site, web, pr.ListID.ToString(), pr.ItemId, permission, pr.User)) { setPerm: SPList List = web.Lists[pr.ListID]; SPListItem listItem = List.GetItemById(pr.ItemId); if (!listItem.HasUniqueRoleAssignments) { listItem.BreakRoleInheritance(true); } Common.RemoveListItemLimitedPermissions(listItem); Common.RemoveListItemPermissionEntry(listItem, pr.User, false); listItem = Common.SetItemPermissions(web, listItem, permission, pr.User); try { listItem.SystemUpdate(); } catch { //if in our workflow, we are changing the list item on which we are perfoming this operation, might need to try a couple of times if (retryCount <= 3) { retryCount++; goto setPerm; } } } } } }); }
/// <summary> /// processes revoke permission request /// </summary> /// <param name="pr"></param> private void ProcessRevokeRequest(PermissionRequest pr) { int retryCount = 0; SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(pr.SiteID)) { using (SPWeb web = site.AllWebs[pr.WebID]) { SPList list = web.Lists[pr.ListID]; revokePerm: SPListItem listItem = list.Items.GetItemById(pr.ItemId); Common.RemoveListItemPermissionEntry(listItem, pr.User, true); try { listItem.SystemUpdate(); } catch {//if in our workflow, we are changing the list item on which we are perfoming this operation, might need to try a couple of times if (retryCount <= 3) { retryCount++; goto revokePerm; } } } } }); }
/// <summary> /// processes reset permission request /// </summary> /// <param name="pr"></param> private void ProcessResetRequest(PermissionRequest pr) { int retryCount = 0; SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(pr.SiteID)) { using (SPWeb web = site.AllWebs[pr.WebID]) { SPList list = web.Lists[pr.ListID]; resetPerm: SPListItem listItem = list.Items.GetItemById(pr.ItemId); if (listItem.HasUniqueRoleAssignments) { listItem.ResetRoleInheritance(); try { listItem.SystemUpdate(); } catch { //if in our workflow, we are changing the list item on which we are perfoming this operation, might need to try a couple of times if (retryCount <= 3) { retryCount++; goto resetPerm; } } } } } }); }