/* Thor Server Project Copyright 2008 Joe Hegarty This file is part of The Thor Server Project. The Thor Server Project is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. The Thor Server Project is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with The Thor Server Project. If not, see . */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using ThorServer.Data; namespace ThorServer.Game.Users { public class RoleManager { public bool HasRight(int roleId, string right) { StringBuilder sb = new StringBuilder(); bool hasParent = true; sb.Append(roleId); Database db = new Database(); while (hasParent) { db.sqlexecute.Parameters.AddWithValue("@roleid", roleId); roleId = db.getInt("SELECT InheritRole FROM Roles WHERE RoleID = @roleid;"); db.sqlexecute.Parameters.Clear(); if (roleId > 0) { sb.Append(", " + roleId.ToString()); } else { hasParent = false; } } db.sqlexecute.Parameters.AddWithValue("@rightname", right); int tmpRole = db.getInt("SELECT COUNT(*) FROM RoleAccess WHERE RoleID IN (" + sb.ToString() + ") AND RightName = @rightname;"); return (tmpRole > 0); } public Dictionary GetRoles() { Dictionary results = new Dictionary(); Database db = new Database(); DataTable dTable = db.GetDataSet("SELECT * FROM Roles").Tables[0]; foreach (DataRow row in dTable.Rows) { results.Add((int)row["RoleID"], row["RoleName"].ToString()); } return results; } public List GetRights(int roleId) { List results = new List(); bool hasParent = true; Database db = new Database(); while (hasParent) { db.sqlexecute.Parameters.AddWithValue("@roleid", roleId); DataTable dTable = db.GetDataSet("SELECT * FROM RoleAccess WHERE RoleID = @roleid").Tables[0]; db.sqlexecute.Parameters.Clear(); foreach (DataRow dRow in dTable.Rows) { results.Add(dRow["RightName"].ToString()); } db.sqlexecute.Parameters.AddWithValue("@roleid", roleId); roleId = db.getInt("SELECT InheritRole FROM Roles WHERE RoleID = @roleid;"); db.sqlexecute.Parameters.Clear(); if (roleId == 0) { hasParent = false; } } return results; } public string GenerateRightsList(int roleid) { List roleList = GetRights(roleid); StringBuilder sb = new StringBuilder(); foreach (string right in roleList) { sb.Append(right); sb.Append(Convert.ToChar(2)); } return sb.ToString(); } public bool HasBadge(int roleId, string badge) { StringBuilder sb = new StringBuilder(); bool hasParent = true; sb.Append(roleId); Database db = new Database(); while (hasParent) { db.sqlexecute.Parameters.AddWithValue("@roleid", roleId); roleId = db.getInt("SELECT InheritRole FROM Roles WHERE RoleID = @roleid;"); db.sqlexecute.Parameters.Clear(); if (roleId > 0) { sb.Append(", " + roleId.ToString()); } else { hasParent = false; } } db.sqlexecute.Parameters.AddWithValue("@badgename", badge); int tmpRole = db.getInt("SELECT COUNT(*) FROM Badges WHERE RoleID IN (" + sb.ToString() + ") AND BadgeName = @badgename;"); return (tmpRole > 0); } public int GetBadgeCount(int roleId) { StringBuilder sb = new StringBuilder(); bool hasParent = true; sb.Append(roleId); Database db = new Database(); while (hasParent) { db.sqlexecute.Parameters.AddWithValue("@roleid", roleId); roleId = db.getInt("SELECT InheritRole FROM Roles WHERE RoleID = @roleid;"); db.sqlexecute.Parameters.Clear(); if (roleId > 0) { sb.Append(", " + roleId.ToString()); } else { hasParent = false; } } int tmpRole = db.getInt("SELECT COUNT(*) FROM Badges WHERE RoleID IN (" + sb.ToString() + ");"); return tmpRole; } public List GetBadges(int roleId) { List results = new List(); bool hasParent = true; Database db = new Database(); while (hasParent) { db.sqlexecute.Parameters.AddWithValue("@roleid", roleId); DataTable dTable = db.GetDataSet("SELECT * FROM Badges WHERE RoleID = @roleid").Tables[0]; db.sqlexecute.Parameters.Clear(); foreach (DataRow dRow in dTable.Rows) { results.Add(dRow["BadgeName"].ToString()); } db.sqlexecute.Parameters.AddWithValue("@roleid", roleId); roleId = db.getInt("SELECT InheritRole FROM Roles WHERE RoleID = @roleid;"); db.sqlexecute.Parameters.Clear(); if (roleId == 0) { hasParent = false; } } return results; } public string GenerateBadgeList(int roleid) { List badgeList = GetBadges(roleid); StringBuilder sb = new StringBuilder(); foreach (string badge in badgeList) { sb.Append(badge); sb.Append(Convert.ToChar(2)); } return sb.ToString(); } } }