Musisz dziedziczyć po klasie MembershipProvider oraz RoleProvider, zmienić config w webconfig i to w sumie tyle.
public class DziennikRoleProvider : RoleProvider
{
private UsersRepository repository { get; set; }
public DziennikRoleProvider()
{
repository = new UsersRepository();
}
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}
public override string ApplicationName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public override void CreateRole(string roleName)
{
throw new NotImplementedException();
}
public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
{
throw new NotImplementedException();
}
public override string[] FindUsersInRole(string roleName, string usernameToMatch)
{
throw new NotImplementedException();
}
public override string[] GetAllRoles()
{
throw new NotImplementedException();
}
public override string[] GetRolesForUser(string username){
Dziennik_MVC.Models.Entities.Roles role = this.repository.GetRoleForUser(username);
if (!this.repository.RoleExists(role))
return new string[] { string.Empty };
return new string[] { role.RoleName };
}
public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}
public override bool IsUserInRole(string username, string rolename)
{
Users user = repository.GetUser(username);
Dziennik_MVC.Models.Entities.Roles role = repository.GetRole(rolename);
if (!repository.UserExists(user))
return false;
if (!repository.RoleExists(role))
return false;
return user.Roles.RoleName == role.RoleName; ;
}
public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}
public override bool RoleExists(string roleName)
{
throw new NotImplementedException();
}
}
To kod z mojej klasy, możesz zaimplementować wszystkie metody.
Analogicznie Membership
private UsersRepository repository { get; set; }
public DziennikMembershipProvider() {
repository = new UsersRepository();
}
public override int MinRequiredPasswordLength
{
get
{
return 6;
}
}
public bool isUserActive(string login){
return repository.IsActive(login);
}
public override bool ValidateUser(string username, string password)
{
if (string.IsNullOrEmpty(password.Trim()) || string.IsNullOrEmpty(username.Trim()))
return false;
string hash = FormsAuthentication.HashPasswordForStoringInConfigFile(password.Trim(), "md5");
return this.repository.GetAllUsers.Any(user => (user.Login == username.Trim()) && (user.Password == hash));
}
public override bool ChangePassword(string username, string oldPassword, string newPassword)
{
if (!ValidateUser(username, oldPassword) || string.IsNullOrEmpty(newPassword.Trim()))
return false;
Users user = repository.GetUser(username);
string hash = FormsAuthentication.HashPasswordForStoringInConfigFile(newPassword.Trim(), "md5");
user.Password = hash;
repository.Save();
return true;
}
A teraz zmienić konfiguracje w webconfig
<connectionStrings>
<add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Dziennik;Database=Dziennik;Integrated Security=TRUE " providerName="System.Data.SqlClient" />
</connectionStrings>
<membership defaultProvider="DziennikMembershipProvider">
<providers>
<clear />
<add name="DziennikMembershipProvider" type="Dziennik_MVC.Helpers.DziennikMembershipProvider" connectionStringName="EFDbContext" />
</providers>
</membership>
<profile>
<providers>
<clear />
</providers>
</profile>
<roleManager defaultProvider="DziennikRoleProvider" enabled="true" cacheRolesInCookie="true">
<providers>
<clear />
<add name="DziennikRoleProvider" type="Dziennik_MVC.Helpers.DziennikRoleProvider" connectionStringName="EFDbContext" />
</providers>
</roleManager>