private List <PermissionKind> GetPermissionKinds(BasePermissions basePermissions) { var retVal = new List <PermissionKind>(); foreach (var permissionKind in (PermissionKind[])Enum.GetValues(typeof(PermissionKind))) { if (basePermissions.Has(permissionKind)) { retVal.Add(permissionKind); } } return(retVal); }
internal SPPermissionInfo(BasePermissions permissions) { if (permissions == null) { throw new ArgumentNullException(nameof(permissions)); } this.High = 0u; this.Low = 0u; foreach (var perm in (PermissionKind[])Enum.GetValues(typeof(PermissionKind))) { if (permissions.Has(perm)) { if (perm == PermissionKind.FullMask) { this.Low = 65535u; this.High = 32767u; continue; } if (perm == PermissionKind.EmptyMask) { this.Low = 0u; this.High = 0u; continue; } int low = perm - PermissionKind.ViewListItems; uint high = 1u; if (low >= 0 && low < 32) { high <<= low; this.Low |= high; continue; } if (low >= 32 && low < 64) { high <<= low - 32; this.High |= high; } } } }
/// <summary> /// Returns role assignments for the current sharepoint objects /// </summary> /// <param name="context"></param> /// <param name="CurrentWeb"></param> /// <param name="Object"></param> /// <param name="childSecurableObject"></param> private static void GetRoleAssignments(ClientContext context, Web CurrentWeb, object Object, SPSecurableObject childSecurableObject) { try { string objectDetails = string.Empty; childSecurableObject.RoleAssignments = new List <SPRoleAssignment>(); RoleAssignmentCollection roleAssignments = null; Type spObjectType = Object.GetType(); switch (spObjectType.Name) { case "Web": Web web = Object as Web; objectDetails = web.ServerRelativeUrl; roleAssignments = web.RoleAssignments; break; case "List": List list = Object as List; objectDetails = "List " + list.Title; roleAssignments = list.RoleAssignments; break; case "ListItem": ListItem listItem = Object as ListItem; objectDetails = "List Item ID " + listItem.Id; roleAssignments = listItem.RoleAssignments; break; } context.Load(roleAssignments); context.ExecuteQuery(); foreach (RoleAssignment roleAssignment in roleAssignments) { SPRoleAssignment spRoleAssignment = new SPRoleAssignment(); spRoleAssignment.Member = new SPMember(); spRoleAssignment.RoleDefBindings = new SPRoleDefBindings(); context.Load(roleAssignment); context.Load(roleAssignment.Member); context.ExecuteQuery(); Principal roleMember = roleAssignment.Member; if (roleMember.PrincipalType == Microsoft.SharePoint.Client.Utilities.PrincipalType.SharePointGroup) { spRoleAssignment.PrincipalType = PrincipalType.Group; spRoleAssignment.Member.Group = new SPGroup(); var query = from g in spSiteGroups.SiteGroups where g.GroupName == roleMember.LoginName select g; SPGroup group = query.First(); spRoleAssignment.Member.Group.GroupName = group.GroupName; spRoleAssignment.Member.Group.Users = new List <SPUser>(); foreach (SPUser usr in group.Users) { SPUser spUser = new SPUser { DisplayName = usr.DisplayName, Email = usr.Email, LoginId = usr.LoginId }; spRoleAssignment.Member.Group.Users.Add(spUser); } } else if (roleMember.PrincipalType == Microsoft.SharePoint.Client.Utilities.PrincipalType.User) { spRoleAssignment.PrincipalType = PrincipalType.User; spRoleAssignment.Member.User = new SPUser { DisplayName = roleMember.Title, LoginId = roleMember.LoginName }; } context.Load(roleAssignment, r => r.RoleDefinitionBindings); context.ExecuteQuery(); spRoleAssignment.RoleDefBindings.Permissions = new List <SPBasePermissions>(); foreach (RoleDefinition roleDef in roleAssignment.RoleDefinitionBindings) { if (string.IsNullOrEmpty(spRoleAssignment.RoleDefBindings.RoleName)) { spRoleAssignment.RoleDefBindings.RoleName = roleDef.Name; } else { spRoleAssignment.RoleDefBindings.RoleName = spRoleAssignment.RoleDefBindings.RoleName + ", " + roleDef.Name; } //enumerate the enum and check each permission //type to see if the perm is included string[] keys = Enum.GetNames(typeof(PermissionKind)); context.Load(roleDef, r => r.BasePermissions); context.ExecuteQuery(); //get a reference to the base permissions //in this RoleDefinition BasePermissions bp = roleDef.BasePermissions; //enumerate the enum foreach (string key in keys) { if (bp.Has((PermissionKind)Enum.Parse(typeof(PermissionKind), key))) { SPBasePermissions spBasePermission = new SPBasePermissions { PermissionName = key }; spRoleAssignment.RoleDefBindings.Permissions.Add(spBasePermission); } } } childSecurableObject.RoleAssignments.Add(spRoleAssignment); } } catch (Exception ex) { RaiseStatusUpdate("ERROR: " + CurrentWeb.ServerRelativeUrl + ". Stack Trace: " + ex.Message, UpdateType.StatusUpdateOnly); } }