private void ProcessRoleInheritance(object modelHost, SecurableObject securableObject, BreakRoleInheritanceDefinition breakRoleInheritanceModel)
        {
            var context = securableObject.Context;

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model = null,
                EventType = ModelEventType.OnProvisioning,
                Object = securableObject,
                ObjectType = typeof(SecurableObject),
                ObjectDefinition = breakRoleInheritanceModel,
                ModelHost = modelHost
            });

            //context.Load(securableObject);
            //context.ExecuteQueryWithTrace();

            if (!securableObject.IsPropertyAvailable("HasUniqueRoleAssignments"))
            {
                context.Load(securableObject, s => s.HasUniqueRoleAssignments);
                context.ExecuteQueryWithTrace();
            }

            if (!securableObject.HasUniqueRoleAssignments)
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall,
                    "HasUniqueRoleAssignments is FALSE. Breaking role inheritance with CopyRoleAssignments: [{0}] and ClearSubscopes: [{1}]",
                    new object[]
                    {
                        breakRoleInheritanceModel.CopyRoleAssignments,
                        breakRoleInheritanceModel.ClearSubscopes
                    });

                securableObject.BreakRoleInheritance(breakRoleInheritanceModel.CopyRoleAssignments, breakRoleInheritanceModel.ClearSubscopes);
                context.ExecuteQueryWithTrace();
            }

            if (breakRoleInheritanceModel.ForceClearSubscopes)
            {
                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "ForceClearSubscopes is TRUE. Removing all role assignments.");

                context.Load(securableObject.RoleAssignments);
                context.ExecuteQueryWithTrace();

                while (securableObject.RoleAssignments.Count > 0)
                    securableObject.RoleAssignments[0].DeleteObject();
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model = null,
                EventType = ModelEventType.OnProvisioned,
                Object = securableObject,
                ObjectType = typeof(SecurableObject),
                ObjectDefinition = breakRoleInheritanceModel,
                ModelHost = modelHost
            });
        }
        public static PermissionCollection GetPermissions(this SecurableObject secObj)
        {
            Type   secType = secObj.GetType();
            string name    = secType.Name.Equals("ListItem") ? "DisplayName" : "Title";

            secObj.Context.Load(secObj, s => s.HasUniqueRoleAssignments, s => s.RoleAssignments);
            try
            {
                secObj.Context.ExecuteQuery();
            }
            catch (ServerException)
            {
                return(null);
            }

            bool?check = secObj.IsPropertyAvailable("HasUniqueRoleAssignments")
                   ? (bool?)secObj.HasUniqueRoleAssignments
                   : null;

            if (!check.HasValue)
            {
                return(null);
            }

            //if (!(secObj is Web))
            //{
            //    MethodInfo genMeth = typeof(ClientObjectExtensions)
            //        .GetMethod("GetClientObjectExpression", BindingFlags.Static | BindingFlags.NonPublic)
            //            .MakeGenericMethod(secType);

            //    object nameExpression = genMeth.Invoke(null, new object[]
            //    {
            //        secObj, name
            //    });
            //    object idExpression = genMeth.Invoke(null, new object[]
            //    {
            //        secObj, "Id"
            //    });

            //    MethodInfo genLoad = typeof(ClientObjectExtensions)
            //        .GetMethod("SpecialLoad", BindingFlags.NonPublic | BindingFlags.Static)
            //            .MakeGenericMethod(secType);

            //    genLoad.Invoke(secObj, new object[]
            //    {
            //        secObj, nameExpression
            //    });
            //    genLoad.Invoke(secObj, new object[]
            //    {
            //        secObj, idExpression
            //    });
            //    secObj.Context.ExecuteQuery();
            //}
            PermissionCollection permissions = PermissionCollection.ResolvePermissions(secObj);

            //ValueTuple<string, object> tuple = GetNameAndIdValue(secObj, name);
            return(permissions);
        }
Example #3
0
        public static bool HasClearSubscopes(this SecurableObject secObject)
        {
            if (!secObject.IsPropertyAvailable("RoleAssignments"))
            {
                secObject.Context.Load(secObject, s => s.RoleAssignments);
                secObject.Context.ExecuteQuery();
            }

            return(secObject.RoleAssignments.Count == 0);
        }
Example #4
0
        public static bool HasCopyRoleAssignments(this SecurableObject secObject)
        {
            if (!secObject.IsPropertyAvailable("FirstUniqueAncestorSecurableObject"))
            {
                secObject.Context.Load(secObject, s => s.FirstUniqueAncestorSecurableObject);
                secObject.Context.ExecuteQuery();
            }

            var parent = secObject.FirstUniqueAncestorSecurableObject;

            return(secObject.RoleAssignments == parent.RoleAssignments);
        }
        public SPSecurable(SecurableObject so)
        {
            SecObj = so;
            try
            {
                CTX.Lae(SecObj, true, s => s.HasUniqueRoleAssignments, s => s.RoleAssignments);
            }
            catch (ServerException ex)
            {
                if (ex.Message.Contains("does not belong to a list."))
                {
                    _pol = false;
                }
            }

            HasUniquePermissions = !SecObj.IsPropertyAvailable("HasUniqueRoleAssignments") ?
                                   null : (bool?)SecObj.HasUniqueRoleAssignments;

            if (!this.HasUniquePermissions.HasValue)
            {
                _pol = false;
            }
        }
        private void ProcessRoleInheritance(object modelHost, SecurableObject securableObject, BreakRoleInheritanceDefinition breakRoleInheritanceModel)
        {
            var context = securableObject.Context;

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = securableObject,
                ObjectType       = typeof(SecurableObject),
                ObjectDefinition = breakRoleInheritanceModel,
                ModelHost        = modelHost
            });

            //context.Load(securableObject);
            //context.ExecuteQueryWithTrace();

            if (!securableObject.IsPropertyAvailable("HasUniqueRoleAssignments"))
            {
                context.Load(securableObject, s => s.HasUniqueRoleAssignments);
                context.ExecuteQueryWithTrace();
            }

            if (!securableObject.HasUniqueRoleAssignments)
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall,
                                           "HasUniqueRoleAssignments is FALSE. Breaking role inheritance with CopyRoleAssignments: [{0}] and ClearSubscopes: [{1}]",
                                           new object[]
                {
                    breakRoleInheritanceModel.CopyRoleAssignments,
                    breakRoleInheritanceModel.ClearSubscopes
                });

                securableObject.BreakRoleInheritance(breakRoleInheritanceModel.CopyRoleAssignments, breakRoleInheritanceModel.ClearSubscopes);
                context.ExecuteQueryWithTrace();
            }

            if (breakRoleInheritanceModel.ForceClearSubscopes)
            {
                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "ForceClearSubscopes is TRUE. Removing all role assignments.");

                context.Load(securableObject.RoleAssignments);
                context.ExecuteQueryWithTrace();

                while (securableObject.RoleAssignments.Count > 0)
                {
                    securableObject.RoleAssignments[0].DeleteObject();
                }
            }

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = securableObject,
                ObjectType       = typeof(SecurableObject),
                ObjectDefinition = breakRoleInheritanceModel,
                ModelHost        = modelHost
            });
        }
 public static bool CanSetPermissions(this SecurableObject secObj)
 {
     return(secObj.IsPropertyAvailable("HasUniqueRoleAssignments"));
 }