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