Umbraco 5 how to get all roles and users

1.5k views Asked by At

I want to get all the membership roles in the system and all the members in the system.

I've tried using

System.Web.Security.Roles.GetAllRoles();
System.Web.Security.Roles.GetUsersInRoles(roles[0]);

and a couple of others, but they all throw the not implemented error.

I'm using a clean VisualStudio Umbraco template of V5.1 running locally on IIS Express and SQL Express.

Any thoughts would be much appreciated.

1

There are 1 answers

1
seraphym On BEST ANSWER

I noted that the provider was not queried in populating the role listing from the backoffice and came to the conclusion that not only was getallroles not called, it was never implemented.

Instead, the hive is queried for the list of roles.

Despite the claim that membership services was baked-in again starting with 5.1, it comes with some particularly serious limitations.

If you're committed to 5.1 and you need a custom roleprovider, then you'll need to come up with a solution that occasionally syncs roles to Umbraco.

If you don't need a custom roleprovider, then you can query the hive to pull the related content. The special urls are:

security://profiles

Used to store profile data by the Hive Membership Wrapper. Profile data is additional data for any member/user that cannot be stored in the ASP.Net MembershipProvider

security://user-groups

Used to store the data for back office user groups/roles.

security://member-groups

Used to store the data for members' groups/roles.

security://member-types

Used to store the schema data for member types

security://membership-data

Used by the UmbracoMembershipProvider to store the ASP.Net MembershipProvider information

security://users

Used to query the Hive membership provider wrapper for back office users

security://members

Used to query the Hive membership provider wrapper for Umbraco members

Finally, be aware that membership services are now abstracted. There's a completely new separate interface for Umbraco's take on membership.

Rather than using the 'baseline' .net membership provider and role provider, you use the membership service available in your current IRoutableRequestContext:

e.g. rather than using Membership.ValidateUser(), you would use _context.Application.Security.Members.Validate() which wraps the supplied MembershipProvider.

Good luck, and post any findings of your own as the community trudges through this release together.

EDIT: An example for getting a list of the member roles

using (var securityUow = context.Application.Hive.OpenReader<ISecurityStore>())
{
   return securityUow.Repositories.GetEntityByRelationType<UserGroup>
   (
          FixedRelationTypes.DefaultRelationType,  
          Umbraco.Framework.Security.Model.FixedHiveIds.MemberGroupVirtualRoot
   ).OrderBy(x => x.Name).ToList();

}