using System; using System.Linq; using System.Collections.Generic; using NHibernate; using Tanshu.Accounts.Entities.Auth; namespace Tanshu.Accounts.Repository { public class UserBI : UnitOfWork { public new IList List() { return _session.QueryOver() .OrderBy(x => x.Name).Asc .List(); } public IList GroupList() { return _session.QueryOver() .OrderBy(x => x.Name).Asc .List(); } public IList GetFilteredUsers(Dictionary filter) { return _session.QueryOver() .WhereRestrictionOn(x => x.Name).IsLike(string.Format("%{0}%", filter["Name"])) .List(); } public void ChangePassword(User user, string password) { user.Password = Tanshu.Common.Md5.Hash(password, "v2"); _session.Update(user); } public User ValidateUser(string name, string password) { password = Tanshu.Common.Md5.Hash(password, "v2"); return Get(x => x.Name == name && x.Password == password); } public User MsrValidateUser(string msrString) { return Get(x => x.MsrString == msrString); } public IList 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(); } public void Update(User user, IEnumerable selectedGroups) { var roles = new Dictionary(); 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 IList Roles(Guid userID) { const string query = @" select distinct(r) from UserGroup ug inner join ug.User u inner join ug.Group g inner join g.RoleGroups rg inner join rg.Role r where u.UserID = :userID order by r.Name"; return _session.CreateQuery(query) .SetParameter("userID", userID) .List(); } } }