217 lines
4.8 KiB
C#
217 lines
4.8 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Web.Security;
|
|
using MileageTraker.Web.Context;
|
|
using MileageTraker.Web.Models;
|
|
|
|
namespace MileageTraker.Web.Membership
|
|
{
|
|
public class CodeFirstRoleProvider : RoleProvider
|
|
{
|
|
public override string ApplicationName
|
|
{
|
|
get { return GetType().Assembly.GetName().Name; }
|
|
set { ApplicationName = GetType().Assembly.GetName().Name; }
|
|
}
|
|
|
|
public override bool RoleExists(string roleName)
|
|
{
|
|
if (string.IsNullOrEmpty(roleName))
|
|
{
|
|
return false;
|
|
}
|
|
using (var context = new MileageTrakerContext())
|
|
{
|
|
Role role = context.Roles.FirstOrDefault(rl => rl.RoleName == roleName);
|
|
return role != null;
|
|
}
|
|
}
|
|
|
|
public override bool IsUserInRole(string username, string roleName)
|
|
{
|
|
if (string.IsNullOrEmpty(username))
|
|
{
|
|
return false;
|
|
}
|
|
if (string.IsNullOrEmpty(roleName))
|
|
{
|
|
return false;
|
|
}
|
|
using (var context = new MileageTrakerContext())
|
|
{
|
|
User user;
|
|
user = context.Users.FirstOrDefault(usr => usr.Username == username);
|
|
if (user == null)
|
|
{
|
|
return false;
|
|
}
|
|
var role = context.Roles.FirstOrDefault(rl => rl.RoleName == roleName);
|
|
if (role == null)
|
|
{
|
|
return false;
|
|
}
|
|
return user.Roles.Contains(role);
|
|
}
|
|
}
|
|
|
|
public override string[] GetAllRoles()
|
|
{
|
|
using (var context = new MileageTrakerContext())
|
|
{
|
|
return context.Roles.Select(rl => rl.RoleName).ToArray();
|
|
}
|
|
}
|
|
|
|
public override string[] GetUsersInRole(string roleName)
|
|
{
|
|
if (string.IsNullOrEmpty(roleName))
|
|
{
|
|
return null;
|
|
}
|
|
using (var context = new MileageTrakerContext())
|
|
{
|
|
Role role = context.Roles.FirstOrDefault(rl => rl.RoleName == roleName);
|
|
if (role != null)
|
|
{
|
|
return role.Users.Select(usr => usr.Username).ToArray();
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public override string[] GetRolesForUser(string username)
|
|
{
|
|
if (string.IsNullOrEmpty(username))
|
|
{
|
|
return null;
|
|
}
|
|
using (var context = new MileageTrakerContext())
|
|
{
|
|
User user;
|
|
user = context.Users.FirstOrDefault(Usr => Usr.Username == username);
|
|
if (user != null)
|
|
{
|
|
return user.Roles.Select(rl => rl.RoleName).ToArray();
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public override string[] FindUsersInRole(string roleName, string usernameToMatch)
|
|
{
|
|
if (string.IsNullOrEmpty(roleName))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(usernameToMatch))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
using (var context = new MileageTrakerContext())
|
|
{
|
|
return (from rl in context.Roles
|
|
from usr in rl.Users
|
|
where rl.RoleName == roleName && usr.Username.Contains(usernameToMatch)
|
|
select usr.Username).ToArray();
|
|
}
|
|
}
|
|
|
|
public override void CreateRole(string roleName)
|
|
{
|
|
if (!string.IsNullOrEmpty(roleName))
|
|
{
|
|
using (var context = new MileageTrakerContext())
|
|
{
|
|
Role role = context.Roles.FirstOrDefault(rl => rl.RoleName == roleName);
|
|
if (role == null)
|
|
{
|
|
var newRole = new Role
|
|
{
|
|
RoleId = Guid.NewGuid(),
|
|
RoleName = roleName
|
|
};
|
|
context.Roles.Add(newRole);
|
|
context.SaveChanges();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
|
|
{
|
|
if (string.IsNullOrEmpty(roleName))
|
|
{
|
|
return false;
|
|
}
|
|
using (var context = new MileageTrakerContext())
|
|
{
|
|
var role = context.Roles.FirstOrDefault(rl => rl.RoleName == roleName);
|
|
if (role == null)
|
|
{
|
|
return false;
|
|
}
|
|
if (throwOnPopulatedRole)
|
|
{
|
|
if (role.Users.Any())
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
role.Users.Clear();
|
|
}
|
|
context.Roles.Remove(role);
|
|
context.SaveChanges();
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
|
|
{
|
|
using (var context = new MileageTrakerContext())
|
|
{
|
|
var users = context.Users.Where(usr => usernames.Contains(usr.Username)).ToList();
|
|
var roles = context.Roles.Where(rl => roleNames.Contains(rl.RoleName)).ToList();
|
|
foreach (var user in users)
|
|
{
|
|
foreach (var role in roles)
|
|
{
|
|
if (!user.Roles.Contains(role))
|
|
{
|
|
user.Roles.Add(role);
|
|
}
|
|
}
|
|
}
|
|
context.SaveChanges();
|
|
}
|
|
}
|
|
|
|
public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
|
|
{
|
|
using (var context = new MileageTrakerContext())
|
|
{
|
|
foreach (var username in usernames)
|
|
{
|
|
var us = username;
|
|
var user = context.Users.FirstOrDefault(u => u.Username == us);
|
|
if (user != null)
|
|
{
|
|
foreach (var roleName in roleNames)
|
|
{
|
|
var rl = roleName;
|
|
var role = user.Roles.FirstOrDefault(r => r.RoleName == rl);
|
|
if (role != null)
|
|
{
|
|
user.Roles.Remove(role);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
context.SaveChanges();
|
|
}
|
|
}
|
|
}
|
|
} |