using System;
using System.Collections;
using System.Xml;
using System.Data;
using System.IO;
using System.Data.OracleClient;
using Core.Mes.IBaseInterface;
using Core.Mes.ServerFrameWork;
namespace Core.Mes.PurviewManager
{
///
/// 权限管理服务端,用于在客户端输入用户名密码后
/// 由服务端来获取对应权限文件,然后根据权限文件
/// 将相应的窗体信息从数据库中读出,再将信息合并
/// 到权限文件中,然后将权限文件返回给客户端生成
/// 菜单文件
///
/// fanxb 20050705
///
public class PurviewManager : IComponent
{
#region " variable "
private UAM_DEPARTMENT _departmentClass;
private UAM_ROLE _roleClass;
private UAM_FUNCTION _functionClass;
private UAM_USER _userClass;
private UAM_AUTHORIZATION _authorClass;
#endregion
#region " Construct "
public PurviewManager() { }
#endregion
#region " 获取权限信息 "
///
/// 获取权限信息
///
/// 用户名ID
/// 密码
/// 权限xml文件的字符串
public ReturnObject GetPurviewInfo(string userID, string passwd)
{
lock (this)
{
string err = "";
DataRow dr = GetPurviewRow(userID, passwd, out err);
if (err != "")
{
return new ReturnObject(null, err);
}
if (dr == null || dr["MEMO"] == null)
return new ReturnObject(null, 10009, "用户名或密码错误!");
string fileName = dr["MEMO"].ToString().Trim();
if (File.Exists(@"CA\" + fileName))
{
XmlDocument doc = ReadXmlDoc(fileName);
if (doc != null)
{
UserInfo useInfo;
try
{
useInfo = SetUserInfo(dr);
SetValidateInfo(useInfo);
//useInfo.MenuConfigInfo = doc.InnerXml;
}
catch (Exception ex)
{
return new ReturnObject(null, ex.Message);
}
return new ReturnObject(useInfo);
}
else
return new ReturnObject(null, 10010, "权限文件内容错误!!");
}
else
{
return new ReturnObject(null, 10006, "未找到指定的文件!");
}
}
}
private DataRow GetPurviewRow(string userID, string passwd, out string err)
{
string sqlstr = "SELECT * FROM UAMV_AUTHORROLE WHERE LOGINID = '" + userID + "' AND PASSWORD = '" + PasswdSecurity(passwd) + "'";
err = "";
System.Data.DataSet ds = DBManager.ExecuteQuery(sqlstr, out err);
if (err.Equals("") && ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
System.Data.DataRow dr = ds.Tables[0].Rows[0];
return dr;
}
return null;
}
///
/// 根据权限配置文件,在数据库中找出对应的表信息
///
/// 权限配置文件名
private XmlDocument ReadXmlDoc(string fileName)
{
XmlDocument doc = new XmlDocument();
try
{
doc.Load(@"CA\" + fileName);
XmlNodeList xnl = doc.ChildNodes[1].ChildNodes;
DataTable dt = GetFormInfoFromDB();
recursionGetNodes(xnl, doc, dt);
return doc;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
///
/// 获取"Default"情况的窗体信息
///
/// 子节点
private void GetDefaultFormInfo(XmlNodeList xnl, XmlDocument doc, DataTable dt)
{
foreach (XmlNode xn in xnl)
{
try
{
string strFormID = xn.Attributes[0].Value.ToString();
DataRow dr = (dt.Select("FunctionID = '" + strFormID + "'"))[0];
AddFormInfoIntoXmlNode(xn, dr, doc);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
///
/// 获取"Tree"情况的窗体信息
/// 采用递归调用的方式
///
/// 子节点
/// xml文档
private void recursionGetNodes(XmlNodeList xnl, XmlDocument doc, DataTable dt)
{
foreach (XmlNode xn in xnl)
{
string strFormID = "";
try
{
strFormID = xn.Attributes[0].Value.ToString();
DataRow dr = (dt.Select("FunctionID = '" + strFormID + "'"))[0];
AddFormInfoIntoXmlNode(xn, dr, doc);
}
catch
{
XmlAttribute newAttr = doc.CreateAttribute("FunctionName");
newAttr.Value = strFormID;
xn.Attributes.InsertAfter(newAttr, xn.Attributes[0]);
}
if (xn.ChildNodes.Count > 0)
{
recursionGetNodes(xn.ChildNodes, doc, dt);
}
}
}
///
/// 从数据库中获取表信息
///
/// 要获取窗体的id号
/// 存有该窗体所有信息的数据行
private DataTable GetFormInfoFromDB()
{
string sqlstr = "SELECT * FROM UAM_FUNCTION";
System.Data.DataSet ds = DBManager.ExecuteQuery(sqlstr);
if (ds != null && ds.Tables.Count > 0)
{
System.Data.DataTable dt = ds.Tables[0];
return dt;
}
else
return null;
}
///
/// 将取道的窗体信息存入xml节点
///
/// 要存入的xml节点
/// 获取到的窗体信息
/// xml文档,用于生成新的属性
private void AddFormInfoIntoXmlNode(XmlNode xn, DataRow dr, XmlDocument doc)
{
if (dr != null)
{
XmlAttribute newAttr = doc.CreateAttribute("AssemblyName");
newAttr.Value = dr["AssemblyName"].ToString().Trim();
xn.Attributes.InsertAfter(newAttr, xn.Attributes[0]);
newAttr = doc.CreateAttribute("ClassName");
newAttr.Value = dr["ClassName"].ToString().Trim();
xn.Attributes.InsertAfter(newAttr, xn.Attributes[1]);
newAttr = doc.CreateAttribute("FunctionName");
newAttr.Value = dr["FunctionName"].ToString().Trim();
xn.Attributes.InsertAfter(newAttr, xn.Attributes[2]);
}
}
private string PasswdSecurity(string pwd)
{
return pwd;
}
private void SetValidateInfo(UserInfo userInfo)
{
if (UserValidate._htUserInfo == null)
UserValidate._htUserInfo = new Hashtable();
string loginID = userInfo.LoginID;
if (UserValidate._htUserInfo.Contains(loginID))
{
UserValidate._htUserInfo[loginID] = userInfo;
}
else
{
UserValidate._htUserInfo.Add(loginID, userInfo);
}
}
private UserInfo SetUserInfo(DataRow dr)
{
UserInfo info;
try
{
info = new UserInfo();
info.LoginID = dr["LOGINID"].ToString();
info.UserID = dr["USERID"].ToString();
info.UserName = dr["NAME"].ToString();
info.ValidateGuid = Guid.NewGuid().ToString();
UpdateValidateGuid(info);
return info;
}
catch (Exception ex)
{
throw ex;
}
}
private void UpdateValidateGuid(UserInfo info)
{
string sqlstr = "UPDATE CXUSER.UAM_AUTHORIZATION SET VALIDATECODE = '"
+ info.ValidateGuid + "' WHERE LOGINID = '"
+ info.LoginID + "' AND USERID = '"
+ info.UserID + "'";
string ErrorInfo = "";
int i = DBManager.ExecuteNonQuery(sqlstr, out ErrorInfo);
if (i == 0)
{
throw new Exception(ErrorInfo);
}
}
public ReturnObject ChangePasswd(string userID, string passwd, string passwdNew)
{
string sqlstr = "SELECT * FROM UAMV_AUTHORROLE WHERE LOGINID = '" + userID + "' AND PASSWORD = '" + PasswdSecurity(passwd) + "'";
string err = "";
System.Data.DataSet ds = DBManager.ExecuteQuery(sqlstr, out err);
if (err != "" || ds == null || ds.Tables.Count == 0)
{
return new ReturnObject(null, "数据库连接错误!");
}
if (ds.Tables[0].Rows.Count == 0)
{
return new ReturnObject(null, "用户名或密码错误!");
}
else
{
sqlstr = "update UAMV_AUTHORROLE set PASSWORD = '" + passwdNew + "' where LOGINID = '" + userID + "'";
err = "";
object obj = DBManager.ExecuteNonQuery(sqlstr, out err);
if (err != "")
{
return new ReturnObject(null, "数据库连接错误!");
}
try
{
if (Convert.ToInt32(obj) > 0)
{
return new ReturnObject(1);
}
else
{
return new ReturnObject(null, "密码修改失败!");
}
}
catch
{
return new ReturnObject(null, "密码修改失败!");
}
}
}
#endregion
#region " Get Files "
public ReturnObject GetFiles()
{
try
{
string[] fileNames = Directory.GetFiles(@"CA\", "*.xml");
return new ReturnObject(fileNames);
}
catch (Exception ex)
{
return new ReturnObject(null, ex.Message);
}
}
#endregion
#region " User Manager "
#region " Department Manager "
public ReturnObject SelectUAM_DEPARTMENT(string strWhere)
{
CheckPartClass();
return _departmentClass.SelectUAM_DEPARTMENT(strWhere);
}
public ReturnObject InsertUAM_DEPARTMENT(ArrayList ar)
{
CheckPartClass();
return _departmentClass.InsertUAM_DEPARTMENT(ar);
}
public ReturnObject DeleteUAM_DEPARTMENT(string strWhere)
{
CheckPartClass();
return _departmentClass.DeleteUAM_DEPARTMENT(strWhere);
}
public ReturnObject UpdateUAM_DEPARTMENT(ArrayList ar)
{
CheckPartClass();
return _departmentClass.UpdateUAM_DEPARTMENT(ar);
}
public ReturnObject UpdateDsPart(DataSet ds, string sqlstr)
{
CheckPartClass();
return _departmentClass.UpdateDataSet(ds, sqlstr);
}
private void CheckPartClass()
{
if (_departmentClass == null)
{
_departmentClass = new UAM_DEPARTMENT();
_departmentClass.DBManager = this.DBManager;
}
}
#endregion
#region " Role Manager "
public ReturnObject SelectUAM_ROLE(string strWhere)
{
CheckRoleClass();
return _roleClass.SelectUAM_ROLE(strWhere);
}
public ReturnObject InsertUAM_ROLE(ArrayList ar)
{
CheckRoleClass();
return _roleClass.InsertUAM_ROLE(ar);
}
public ReturnObject UpdateUAM_ROLE(ArrayList ar)
{
CheckRoleClass();
return _roleClass.UpdateUAM_ROLE(ar);
}
public ReturnObject UpdateDsRole(DataSet ds, string sqlstr)
{
CheckRoleClass();
return _roleClass.UpdateDataSet(ds, sqlstr);
}
public ReturnObject DeleteUAM_ROLE(string strWhere)
{
CheckRoleClass();
return _roleClass.DeleteUAM_ROLE(strWhere);
}
private void CheckRoleClass()
{
if (_roleClass == null)
{
_roleClass = new UAM_ROLE();
_roleClass.DBManager = this.DBManager;
}
}
#endregion
#region " Function Manager "
public ReturnObject SelectUAM_FUNCTION(string strWhere)
{
CheckFuncClass();
return _functionClass.SelectUAM_FUNCTION(strWhere);
}
public ReturnObject UpdateDsFunc(DataSet ds, string sqlstr)
{
CheckFuncClass();
return _functionClass.UpdateDataSet(ds, sqlstr);
}
public ReturnObject DeleteUAM_FUNCTION(string strWhere)
{
CheckFuncClass();
return _functionClass.DeleteUAM_FUNCTION(strWhere);
}
public ReturnObject InsertUAM_FUNCTION(ArrayList ar)
{
CheckFuncClass();
return _functionClass.InsertUAM_FUNCTION(ar);
}
public ReturnObject UpdateUAM_FUNCTION(ArrayList ar)
{
CheckFuncClass();
return _functionClass.UpdateUAM_FUNCTION(ar);
}
private void CheckFuncClass()
{
if (_functionClass == null)
{
_functionClass = new UAM_FUNCTION();
_functionClass.DBManager = this.DBManager;
}
}
#endregion
#region " User Manager "
public ReturnObject SelectUAM_USER(string strWhere)
{
CheckUserClass();
return _userClass.SelectUAM_USER(strWhere);
}
public ReturnObject InsertUAM_USER(ArrayList ar)
{
CheckUserClass();
return _userClass.InsertUAM_USER(ar);
}
public ReturnObject UpdateUAM_USER(ArrayList ar)
{
CheckUserClass();
return _userClass.UpdateUAM_USER(ar);
}
public ReturnObject DeleteUAM_USER(string strWhere)
{
CheckUserClass();
return _userClass.DeleteUAM_USER(strWhere);
}
public ReturnObject UpdateDsUser(DataSet ds, string sqlstr)
{
CheckUserClass();
return _userClass.UpdateDataSet(ds, sqlstr);
}
public ReturnObject GetUAM_USER(string where)
{
CheckUserClass();
return _userClass.GetUAM_USER(where);
}
private void CheckUserClass()
{
if (_userClass == null)
{
_userClass = new UAM_USER();
_userClass.DBManager = this.DBManager;
}
}
#endregion
#region " Author Manager "
public ReturnObject SelectUAM_AUTHORIZATION(string strWhere)
{
CheckAuthorClass();
return _authorClass.SelectUAM_AUTHORIZATION(strWhere);
}
public ReturnObject GetUAM_AUTHORIZATION(string where)
{
CheckAuthorClass();
return _authorClass.GetUAM_AUTHORIZATION(where);
}
public ReturnObject InsertUAM_AUTHORIZATION(ArrayList ar)
{
CheckAuthorClass();
return _authorClass.InsertUAM_AUTHORIZATION(ar);
}
public ReturnObject UpdateUAM_AUTHORIZATION(ArrayList ar)
{
CheckAuthorClass();
return _authorClass.UpdateUAM_AUTHORIZATION(ar);
}
public ReturnObject DeleteUAM_AUTHORIZATION(string strWhere)
{
CheckAuthorClass();
return _authorClass.DeleteUAM_AUTHORIZATION(strWhere);
}
public ReturnObject UpdateAuUser(DataSet ds, string sqlstr)
{
CheckAuthorClass();
return _authorClass.UpdateDataSet(ds, sqlstr);
}
private void CheckAuthorClass()
{
if (_authorClass == null)
{
_authorClass = new UAM_AUTHORIZATION();
_authorClass.DBManager = this.DBManager;
}
}
#endregion
#endregion
#region " Interface "
public void Dispose()
{
}
// public STMes.DBManager DBManager
// {
// set {DBManager = value;}
// get {return DBManager;}
// }
public string Description
{
get
{
string _description = "权限管理服务端,用于在客户端输入用户名密码后";
_description += "由服务端来获取对应权限文件,然后根据权限文件将相应";
_description += "的窗体信息从数据库中读出,再将信息合并到权限";
_description += "文件中,然后将权限文件返回给客户端生成菜单文件";
return _description;
}
}
#endregion
}
}