using System.Collections.Generic; using Tanshu.Accounts.Entities.Auth; using NHibernate; using System; namespace Tanshu.Accounts.Repository { public class MembershipBI : UnitOfWork { public static bool IsUserInRole(Guid userID, string roleName) { string query = @" SELECT COUNT(*) AS Role_Count FROM Auth_UserGroups ug INNER JOIN Auth_RoleGroups rg ON ug.GroupID = rg.GroupID INNER JOIN Auth_Roles r ON rg.RoleID = r.RoleID WHERE ug.UserID = :UserID AND r.Name = :Role;"; using (var session = SessionManager.Session) { return session .CreateSQLQuery(query) .AddScalar("Role_Count", NHibernateUtil.Int32) .SetGuid("UserID", userID) .SetString("Role", roleName) .UniqueResult() > 0; } } #region UserGroup public static IList GetGroups() { using (var session = SessionManager.Session) { return session.CreateCriteria() .List(); } } public static IList GetGroupsOfUser(Guid userID) { using (var session = SessionManager.Session) { string query = "select ug.Group from UserGroup ug where ug.User.UserID = :userID"; var list = session.CreateQuery(query) .SetParameter("userID", userID) .List(); foreach (var item in list) NHibernateUtil.Initialize(item); return list; } } public static IList GetGroupsNotOfUser(Guid userID) { using (var session = SessionManager.Session) { string query = "select g from Group g where g not in (select ug.Group from UserGroup ug where ug.User.UserID = :userID)"; var list = session.CreateQuery(query) .SetParameter("userID", userID) .List(); foreach (var item in list) NHibernateUtil.Initialize(item); return list; } } public static void AddUserToGroup(Guid userID, Guid groupID) { using (var session = SessionManager.Session) { var userGroup = session.CreateQuery("select count(*) from UserGroup ug where ug.User.UserID = :userID and ug.Group.GroupID = :groupID") .SetParameter("userID", userID) .SetParameter("groupID", groupID) .UniqueResult(); if (userGroup == 0) { var user = session.Get(userID); var group = session.Get(groupID); session.Save(new UserGroup() { User = user, Group = group }); } } } public static void RemoveUserFromGroup(Guid userID, Guid groupID) { using (var session = SessionManager.Session) { string query = "delete UserGroup ug where ug.User.UserID = :userID and ug.Group.GroupID = :groupID"; session.CreateQuery(query) .SetParameter("userID", userID) .SetParameter("groupID", groupID) .ExecuteUpdate(); } } #endregion #region RoleGroup public static IList GetRoles() { using (var session = SessionManager.Session) { return session.CreateCriteria() .List(); } } public static IList GetRolesOfGroup(int groupID) { using (var session = SessionManager.Session) { string query = "select rg.Role from RoleGroup rg where rg.Group.GroupID = :groupID"; var list = session.CreateQuery(query) .SetParameter("groupID", groupID) .List(); foreach (var item in list) NHibernateUtil.Initialize(item); return list; } } public static IList GetRolesNotOfGroup(int groupID) { using (var session = SessionManager.Session) { string query = "select r from Role r where r not in (select rg.Role from RoleGroup rg where rg.Group.GroupID = :groupID)"; var list = session.CreateQuery(query) .SetParameter("groupID", groupID) .List(); foreach (var item in list) NHibernateUtil.Initialize(item); return list; } } public static void AddRoleToGroup(Guid roleID, Guid groupID) { using (var session = SessionManager.Session) { var roleGroup = session.CreateQuery("select count(*) from RoleGroup rg where rg.Role.RoleID = :roleID and rg.Group.GroupID = :groupID") .SetParameter("roleID", roleID) .SetParameter("groupID", groupID) .UniqueResult(); if (roleGroup == 0) { var role = session.Get(roleID); var group = session.Get(groupID); session.Save(new RoleGroup() { Role = role, Group = group }); } } } public static void RemoveRoleFromGroup(Guid roleID, Guid groupID) { using (var session = SessionManager.Session) { string query = "delete RoleGroup rg where rg.Role.RoleID = :roleID and rg.Group.GroupID = :groupID"; session.CreateQuery(query) .SetParameter("roleID", roleID) .SetParameter("groupID", groupID) .ExecuteUpdate(); } } #endregion } }