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 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 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 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 bool IsUserInRole(Guid userID, string roleName) { var user = _session.QueryOver() .Where(x => x.UserID == userID) .SingleOrDefault(); return user.UserGroups.SelectMany(x => x.Group.RoleGroups).Any(y=>y.Role.Name == roleName); } } }