You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

390 lines
12 KiB

using Newtonsoft.Json.Linq;
using OT.COM.ArsenalDB;
using OT.COM.LogisticsUtil;
using OT.COM.SignalerMessage;
using SoldierData;
using SoldierData.syserp;
using SoldierDataEntity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace CounsellorBL
{
public partial class AuthorityService : DBService
{
public class PrvilegeInfoEx : PrvilegeInfo
{
public bool CHECKED { get; set; }
public PrvilegeInfoEx(PrvilegeInfo i_pi)
{
PropertyInfo[] pis = typeof(PrvilegeInfo).GetProperties();
foreach (PropertyInfo pi in pis)
{
pi.SetValue(this, pi.GetValue(i_pi, null), null);
}
CHECKED = false;
}
}
public CResponseMessage GetNodeTreee(CRequestMessage i_crm, bool i_bFilterNonePrivilege = false)
{
CResponseMessage crm = null;
string sMsg = null;
try
{
do
{
Dictionary<string, object> dicFormData = null;
CResponseMessage crmCheckToken = checkTokenWithCRequestMessage(i_crm, out dicFormData);
if (EResponseResult.RR_FALSE == crmCheckToken.RESULT)
{
sMsg = crmCheckToken.MSG;
sMsg = BaseExceptionWord.ex000019; // crmCheckToken異常
break;
}
if (false == dicFormData.ContainsKey(BLWording.ROLEID))
{
sMsg = BaseExceptionWord.ex000008; //NO ROLEID
break;
}
object oRoleID = dicFormData[BLWording.ROLEID];
if (null == oRoleID)
{
sMsg = BaseExceptionWord.ex000008; //NO ROLEID
break;
}
string nRoldID = oRoleID.ToString();
//if (false == Int32.TryParse(oRoleID.ToString(), out nRoldID))
//{
// sMsg = "INVALID ROLEID";
// break;
//}
CResponseMessage crmPri = this.GetPrivilege(nRoldID.Trim());
if (EResponseResult.RR_FALSE == crmPri.RESULT)
{
sMsg = crmPri.MSG;
break;
}
CResponseMessage crmAllPri = GetAllPrivilege(nRoldID.Trim());
if (EResponseResult.RR_FALSE == crmAllPri.RESULT)
{
sMsg = crmPri.MSG;
break;
}
crm = new CSuccessResponseMessage(null, i_crm);
// TODO Merger crmAllPri/crmPri
List<PrvilegeInfo> lAllPr = crmAllPri.DATA[BLWording.PRIVILEGES] as List<PrvilegeInfo>;
List<PrvilegeInfo> lOwnPr = crmPri.DATA[BLWording.PRIVILEGES] as List<PrvilegeInfo>;
List<PrvilegeInfoEx> lRes = new List<PrvilegeInfoEx>();
foreach (PrvilegeInfo piAllCur in lAllPr)
{
lRes.Add(new PrvilegeInfoEx(piAllCur) { CHECKED = null != lOwnPr.Where(f => f.ID.Trim() == piAllCur.ID.Trim()).FirstOrDefault() });
}
if (true == i_bFilterNonePrivilege)
{
filterNonePrivilege(ref lRes);
}
//去空白處理
foreach (PrvilegeInfo pi in lRes)
{
pi.ID = pi.ID.Trim();
pi.PARENTID = pi.PARENTID.Trim();
pi.NAME = pi.NAME.Trim();
pi.CONTENT = pi.CONTENT.Trim();
}
crm.DATA.Add(BLWording.PRIVILEGES, lRes);
}
while (false);
}
catch (Exception ex)
{
sMsg = new Util().GetLastExceptionMsg(ex);
}
if (null != sMsg)
{
crm = new CResponseMessage(i_crm) { RESULT = EResponseResult.RR_FALSE, MSG = sMsg };
}
return crm;
}
/// <summary>
/// 移除沒有權限的Node
/// </summary>
/// <param name="i_l"></param>
protected void filterNonePrivilege(ref List<PrvilegeInfoEx> i_l)
{
// Remove Leaf but no Prvilege
Dictionary<string, PrvilegeInfoEx> dicUncheckBranchNodeFID = new Dictionary<string, PrvilegeInfoEx>();
Dictionary<int, int> dicFIDToListIdx = new Dictionary<int, int>();
for (int i = i_l.Count - 1; i >= 0; i--)
{
PrvilegeInfoEx piCur = i_l[i];
if (true == piCur.ISLEAF && false == piCur.CHECKED)
{
i_l.RemoveAt(i);
}
else if (false == piCur.ISLEAF)
{
dicUncheckBranchNodeFID.Add(piCur.ID.Trim(), piCur);
}
}
for (int i = 0; i < i_l.Count; i++)
{
if (true == i_l[i].ISLEAF)
{
PrvilegeInfoEx piCur = i_l[i];
string nParentID = piCur.PARENTID.Trim();
while ("-1" != nParentID)
{
if (true == dicUncheckBranchNodeFID.ContainsKey(nParentID))
{
piCur = dicUncheckBranchNodeFID[nParentID];
dicUncheckBranchNodeFID.Remove(nParentID);
}
else
{
break;
}
}
}
}
foreach (string nFID in dicUncheckBranchNodeFID.Keys)
{
PrvilegeInfoEx piRemove = i_l.Where(f => f.ID.Trim() == nFID.Trim()).FirstOrDefault();
if (null != piRemove)
{
i_l.Remove(piRemove);
}
}
}
public CResponseMessage GetAllPrivilege(string i_nRoleFID)
{
CResponseMessage crm = null;
string sMsg = null;
try
{
do
{
List<QueryJsonElement> lqje = new List<QueryJsonElement>();
crm = new CSuccessResponseMessage(null);
//crm.DATA.Add(BLWording.PRIVILEGES, lp);
}
while (false);
}
catch (Exception ex)
{
sMsg = new Util().GetLastExceptionMsg(ex);
}
if (null != sMsg)
{
crm = new CResponseMessage() { RESULT = EResponseResult.RR_FALSE, MSG = sMsg };
}
return crm;
}
public CResponseMessage GetPrivilege(string i_nRoleFID)
{
CResponseMessage crm = null;
string sMsg = null;
try
{
do
{
List<QueryJsonElement> lqje = new List<QueryJsonElement>();
}
while (false);
}
catch (Exception ex)
{
sMsg = new Util().GetLastExceptionMsg(ex);
}
if (null != sMsg)
{
crm = new CResponseMessage() { RESULT = EResponseResult.RR_FALSE, MSG = sMsg };
}
return crm;
}
/// <summary>
/// Get Privilege by user ID
/// </summary>
/// <param name="i_crm"></param>
/// <returns></returns>
public CResponseMessage Privilege(CRequestMessage i_crm)
{
CResponseMessage crm = null;
string sMsg = null;
try
{
do
{
}
while (false);
}
catch (Exception ex)
{
sMsg = new Util().GetLastExceptionMsg(ex);
}
if (null != sMsg)
{
crm = new CResponseMessage(i_crm) { RESULT = EResponseResult.RR_FALSE, MSG = sMsg };
}
return crm;
}
//public CResponseMessage RolePrivilegeModify(CRequestMessage i_crm)
//{
// CResponseMessage crm = null;
// string sMsg = null;
// try
// {
// do
// {
// Dictionary<string, object> dicFormData = null;
// CResponseMessage crmCheckToken = checkTokenWithCRequestMessage(i_crm, out dicFormData);
// if (EResponseResult.RR_FALSE == crmCheckToken.RESULT)
// {
// sMsg = crmCheckToken.MSG;
// break;
// }
// int nCurUserID = (int)crmCheckToken.DATA[BLWording.SESSION_USER_ID];
// if (false == dicFormData.ContainsKey(BLWording.ROLEID))
// {
// sMsg = "NO ROLEID";
// break;
// }
// object oRoleID = dicFormData[BLWording.ROLEID];
// if (null == oRoleID)
// {
// sMsg = "NULL ROLEID";
// break;
// }
// int nRoldID = -1;
// if (false == Int32.TryParse(oRoleID.ToString(), out nRoldID))
// {
// sMsg = "INVALID ROLEID";
// break;
// }
// List<Command> lCmds = new List<Command>();
// tb_node nSelect = new tb_node();
// nSelect.SetDirty(tb_node.CN_F_N_ID);
// nSelect.SetDirty(tb_node.CN_F_S_NAME);
// Command cSelectNode = Command.SetupSelectCmd(GetMasterDBTableInfo(typeof(tb_node)), nSelect);
// QueryORMList<tb_node> lAllNode = this.adbm.RunQueryORMList<tb_node>(cSelectNode);
// // TODO: Remove All nRoldID
// WhereNode wnDelete = new WhereNode(tb_rolenode.CN_FK_N_ROLEINFO_ROLE_ID, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_rolenode), nRoldID);
// lCmds.Add(Command.SetupDeleteCmd(GetMasterDBTableInfo(typeof(tb_rolenode)), wnDelete));
// // TODO: Add
// JObject jo = dicFormData[BLWording.PRIVILEGES] as JObject;
// foreach (JProperty property in jo.Properties())
// {
// JToken jv = property.Value;
// tb_node nTar = lAllNode.DATA.FirstOrDefault(f => f.f_n_id == Int32.Parse(property.Name));
// if (null != nTar)
// {
// tb_rolenode rnInsert = new tb_rolenode() { fk_n_roleinfo_role_id = nRoldID };
// rnInsert.fk_n_creator_user_id = nCurUserID;
// rnInsert.fk_n_modifier_user_id = nCurUserID;
// rnInsert.fk_n_nodeinfo_node_id = nTar.f_n_id;
// rnInsert.f_s_name = nTar.f_s_name;
// lCmds.Add(Command.SetupInsertCmd(GetMasterDBTableInfo(typeof(tb_rolenode)), rnInsert));
// }
// }
// this.adbm.RunEditCmds(lCmds);
// crm = new CSuccessResponseMessage(null, i_crm);
// }
// while (false);
// }
// catch (Exception ex)
// {
// sMsg = new Util().GetLastExceptionMsg(ex);
// }
// if (null != sMsg)
// {
// crm = new CResponseMessage(i_crm) { RESULT = EResponseResult.RR_FALSE, MSG = sMsg };
// }
// return crm;
//}
}
}