diff --git a/src/Umbraco.Core/Services/IMembershipMemberService.cs b/src/Umbraco.Core/Services/IMembershipMemberService.cs index 8827d71860..74e9046c15 100644 --- a/src/Umbraco.Core/Services/IMembershipMemberService.cs +++ b/src/Umbraco.Core/Services/IMembershipMemberService.cs @@ -6,14 +6,13 @@ using Umbraco.Core.Persistence.Querying; namespace Umbraco.Core.Services { - /// /// Defines part of the MemberService, which is specific to methods used by the membership provider. /// /// /// Idea is to have this is an isolated interface so that it can be easily 'replaced' in the membership provider impl. /// - public interface IMembershipMemberService : IMembershipMemberService + public interface IMembershipMemberService : IMembershipMemberService, IMembershipRoleService { IMember CreateMemberWithIdentity(string username, string email, string password, IMemberType memberType, bool raiseEvents = true); } diff --git a/src/Umbraco.Core/Services/IMembershipRoleService.cs b/src/Umbraco.Core/Services/IMembershipRoleService.cs new file mode 100644 index 0000000000..46860e8c74 --- /dev/null +++ b/src/Umbraco.Core/Services/IMembershipRoleService.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using Umbraco.Core.Models.Membership; +using Umbraco.Core.Persistence.Querying; + +namespace Umbraco.Core.Services +{ + public interface IMembershipRoleService + where T : class, IMembershipUser + { + void AddRole(string roleName); + IEnumerable GetAllRoles(); + IEnumerable GetAllRoles(int memberId); + IEnumerable GetAllRoles(string username); + IEnumerable GetMembersInRole(string roleName); + IEnumerable FindMembersInRole(string roleName, string usernameToMatch, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith); + bool DeleteRole(string roleName, bool throwIfBeingUsed); + void AssignRoles(string[] usernames, string[] roleNames); + void DissociateRoles(string[] usernames, string[] roleNames); + void AssignRoles(int[] memberIds, string[] roleNames); + void DissociateRoles(int[] memberIds, string[] roleNames); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 0f4c958306..9d6fdef060 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -765,6 +765,64 @@ namespace Umbraco.Core.Services #endregion + #region IMembershipRoleService Implementation + + public void AddRole(string roleName) + { + throw new NotImplementedException(); + } + + public IEnumerable GetAllRoles() + { + throw new NotImplementedException(); + } + + public IEnumerable GetAllRoles(int memberId) + { + throw new NotImplementedException(); + } + + public IEnumerable GetAllRoles(string username) + { + throw new NotImplementedException(); + } + + public IEnumerable GetMembersInRole(string roleName) + { + throw new NotImplementedException(); + } + + public IEnumerable FindMembersInRole(string roleName, string usernameToMatch, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) + { + throw new NotImplementedException(); + } + + public bool DeleteRole(string roleName, bool throwIfBeingUsed) + { + throw new NotImplementedException(); + } + + public void AssignRoles(string[] usernames, string[] roleNames) + { + throw new NotImplementedException(); + } + + public void DissociateRoles(string[] usernames, string[] roleNames) + { + throw new NotImplementedException(); + } + + public void AssignRoles(int[] memberIds, string[] roleNames) + { + throw new NotImplementedException(); + } + + public void DissociateRoles(int[] memberIds, string[] roleNames) + { + throw new NotImplementedException(); + } + #endregion + /// /// Rebuilds all xml content in the cmsContentXml table for all media /// @@ -938,5 +996,6 @@ namespace Umbraco.Core.Services // return new Member(name, email, username, password, -1, memType); //} + } } \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index d76ec949ea..5bb05c46d3 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -771,6 +771,7 @@ + diff --git a/src/Umbraco.Web/Security/Providers/MembersRoleProvider.cs b/src/Umbraco.Web/Security/Providers/MembersRoleProvider.cs index 50e84a9afe..274c2eab99 100644 --- a/src/Umbraco.Web/Security/Providers/MembersRoleProvider.cs +++ b/src/Umbraco.Web/Security/Providers/MembersRoleProvider.cs @@ -1,59 +1,76 @@ +using System.Linq; using System.Web.Security; +using Umbraco.Core; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence.Querying; +using Umbraco.Core.Services; namespace Umbraco.Web.Security.Providers { public class MembersRoleProvider : RoleProvider { + private readonly IMembershipRoleService _roleService; + + public MembersRoleProvider(IMembershipRoleService roleService) + { + _roleService = roleService; + } + + public MembersRoleProvider() + : this(ApplicationContext.Current.Services.MemberService) + { + } + private string _applicationName; public override bool IsUserInRole(string username, string roleName) { - throw new System.NotImplementedException(); + return GetRolesForUser(username).Any(x => x == roleName); } public override string[] GetRolesForUser(string username) { - throw new System.NotImplementedException(); + return _roleService.GetAllRoles(username).ToArray(); } public override void CreateRole(string roleName) { - throw new System.NotImplementedException(); + _roleService.AddRole(roleName); } public override bool DeleteRole(string roleName, bool throwOnPopulatedRole) { - throw new System.NotImplementedException(); + return _roleService.DeleteRole(roleName, throwOnPopulatedRole); } public override bool RoleExists(string roleName) { - throw new System.NotImplementedException(); + return _roleService.GetAllRoles().Any(x => x == roleName); } public override void AddUsersToRoles(string[] usernames, string[] roleNames) { - throw new System.NotImplementedException(); + _roleService.AssignRoles(usernames, roleNames); } public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames) { - throw new System.NotImplementedException(); + _roleService.DissociateRoles(usernames, roleNames); } public override string[] GetUsersInRole(string roleName) { - throw new System.NotImplementedException(); + return _roleService.GetMembersInRole(roleName).Select(x => x.Username).ToArray(); } public override string[] GetAllRoles() { - throw new System.NotImplementedException(); + return _roleService.GetAllRoles().ToArray(); } public override string[] FindUsersInRole(string roleName, string usernameToMatch) { - throw new System.NotImplementedException(); + return _roleService.FindMembersInRole(roleName, usernameToMatch, StringPropertyMatchType.Wildcard).Select(x => x.Username).ToArray(); } public override string ApplicationName