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); }
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); }
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")); }