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;
        }
예제 #4
0
        /// <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;

                                     }
                                 }

                             }

                         }
                     }

                 });
        }
예제 #5
0
        /// <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;

                            }
                        }
                    }

                }

            });
        }
예제 #6
0
        /// <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;

                             }
                         }

                     }
                 }

             }

             });
        }