public PrincipalRoleInfoInstance(ScriptEngine engine, PrincipalRoleInfo principalRoleInfo) : base(engine) { if (principalRoleInfo == null) { throw new ArgumentNullException("principalRoleInfo"); } m_principalInstance = new PrincipalInstance(Engine, principalRoleInfo.Principal); m_roles = Engine.Array.Construct(principalRoleInfo.Roles.Select(r => new RoleInstance(Engine, r))); PopulateFields(); PopulateFunctions(); }
public static PrincipalRoleInfo MapPrincipalRoleInfoFromSPRoleAssignment(SPRoleAssignment roleAssignment) { var result = new PrincipalRoleInfo(); if (roleAssignment.Member is SPUser) { var spUser = roleAssignment.Member as SPUser; result.Principal = new User { Email = spUser.Email, LoginName = spUser.LoginName, Name = spUser.Name, }; } else if (roleAssignment.Member is SPGroup) { var spGroup = roleAssignment.Member as SPGroup; result.Principal = new Group { LoginName = spGroup.LoginName, Name = spGroup.Name, DistributionGroupEmail = spGroup.DistributionGroupEmail, }; } else { throw new NotSupportedException("Unknown or Unsupported Principal Type..."); } result.Roles = new List <Role>(); foreach (var role in roleAssignment.RoleDefinitionBindings.OfType <SPRoleDefinition>()) { var r = new Role { Name = role.Name, Order = role.Order, Description = role.Description, }; string permissionsString = Enum.Format(typeof(SPBasePermissions), role.BasePermissions, "F"); r.BasePermissions = permissionsString.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); result.Roles.Add(r); } return(result); }
public static PrincipalRoleInfo MapPrincipalRoleInfoFromSPSecurableObject(SPSecurableObject securableObject, SPPrincipal principal) { PrincipalRoleInfo result = null; try { var roleAssignment = securableObject.RoleAssignments.GetAssignmentByPrincipal(principal); result = MapPrincipalRoleInfoFromSPRoleAssignment(roleAssignment); } catch { //Do nothing. This assumes that catching the exception is less performance intensive than doing the following: //SPRoleAssignment roleAssignment = securableObject.RoleAssignments.OfType<SPRoleAssignment>() // .Where(sp => sp.Member.ID == principal.ID) // .FirstOrDefault(); } return(result); }