narsil/Tanshu.Accounts.Repository/UserBI.cs
2014-10-16 16:45:03 +05:30

85 lines
2.9 KiB
C#

using System;
using System.Linq;
using System.Collections.Generic;
using NHibernate;
using Tanshu.Accounts.Entities.Auth;
namespace Tanshu.Accounts.Repository
{
public class UserBI : UnitOfWork<User>
{
public IList<Group> GroupList()
{
return _session.QueryOver<Group>()
.OrderBy(x => x.Name).Asc
.List();
}
public IList<User> GetFilteredUsers(Dictionary<string, string> filter)
{
return _session.QueryOver<User>()
.WhereRestrictionOn(x => x.Name).IsLike(string.Format("%{0}%", filter["Name"]))
.List();
}
public bool ChangePassword(User userData, string newPassword)
{
var dbUser = Get(x => x.Name == userData.Name && x.Password == userData.Password);
if (dbUser == null)
return false;
dbUser.Password = newPassword;
_session.Update(dbUser);
return true;
}
public User ValidateUser(string name, string password)
{
return Get(x => x.Name == name && x.Password == password);
}
public User MsrValidateUser(string msrString)
{
return Get(x => x.MsrString == msrString);
}
public IList<User> ListActive(DateTime startDate, DateTime finishDate)
{
const string query = @"
select distinct(u) from Voucher v
inner join v.User u
where v.Date >= :startDate and v.Date <= :finishDate
order by u.Name";
return _session.CreateQuery(query)
.SetParameter("startDate", startDate)
.SetParameter("finishDate", finishDate)
.List<User>();
}
public void Update(User user, IEnumerable<Group> selectedGroups)
{
var roles = new Dictionary<Group, bool>();
foreach (var item in GroupList())
{
roles.Add(item, selectedGroups.Any(x => x.GroupID == item.GroupID));
}
foreach (var item in roles)
{
var id = item.Key.GroupID;
var ug = user.UserGroups.SingleOrDefault(x => x.Group.GroupID == id);
if (item.Value && ug == null)
{
var rg = new UserGroup() { User = user, Group = item.Key };
_session.Save(rg);
}
else if (!item.Value && ug != null)
{
user.UserGroups.Remove(ug);
_session.Delete(ug);
}
}
}
public bool IsUserInRole(Guid userID, string roleName)
{
var user = _session.QueryOver<User>()
.Where(x => x.UserID == userID)
.SingleOrDefault();
return user.UserGroups.SelectMany(x => x.Group.RoleGroups).Any(y=>y.Role.Name == roleName);
}
}
}