ASP.NET原創(chuàng)框架九-應(yīng)用模塊開發(fā)
創(chuàng)建應(yīng)用模塊HelloMode
編寫應(yīng)用模塊一般應(yīng)用模塊的工程目錄結(jié)構(gòu)如下圖
View為頁(yè)面視目錄,該目錄結(jié)構(gòu)
UI庫(kù)名語(yǔ)言頁(yè)面文件
deviceUI庫(kù)名語(yǔ)言頁(yè)面文件,其中device表示手機(jī)頁(yè)面存儲(chǔ)地址
如上圖的 amazeuizh-CN表示存儲(chǔ)中文頁(yè)面,amazeuien-us表示存儲(chǔ)英文頁(yè)面
對(duì)于頁(yè)面視文件.aspx選中然后在屬性里“復(fù)制到輸出目錄”選擇“始終復(fù)制”,以便在編譯完成后自動(dòng)復(fù)制到輸出目錄
將編譯的模塊設(shè)置輸出到主程序XNCrmManager的目錄以便調(diào)試
如上面HelloMode,點(diǎn)工程屬性,然后選擇生成
對(duì)于Release生成到主程序XNCrmManager的JsonMode下的模塊名目錄下
對(duì)于Debug生成到主程序XNCrmManager的JsonModeDebug下的模塊名目錄下
在web.config配置
Debug版本的配置如下(紅色部分)
<probing privatePath="JsonModeDebug/前沿模塊;JsonModeDebug/ShareDll;JsonModeDebug/動(dòng)態(tài)表模塊;…;JsonModeDebug/HelloMode;"
Release版本的配置如下(紅色部分)
<probing privatePath="JsonMode/前沿模塊;JsonMode/ShareDll;JsonMode/動(dòng)態(tài)表模塊;…;JsonMode/HelloMode;"
然后在系統(tǒng)里添加應(yīng)用模塊
然后將行業(yè)應(yīng)用綁定到需要的數(shù)據(jù)庫(kù)節(jié)點(diǎn)上
然后添加應(yīng)用模塊用到的數(shù)據(jù)庫(kù)表
輸入表名,初始化表的生成語(yǔ)句
是否全局表,也就是是否每個(gè)節(jié)點(diǎn)的數(shù)據(jù)都一樣,一般情況數(shù)據(jù)都不一致未非全局表
至此應(yīng)用模塊的基本初始化工作基本配置完成
新建的應(yīng)用模塊工程需要引用必要框架庫(kù)如下
IJsonModeEngine IXNDBEngine JsonMode MicroJson XNCache XNDBEngine XNCoreNodeDBEngine
引入庫(kù)位于lib下的$(Configuration)目錄下
實(shí)際工程會(huì)根據(jù)編譯的Release還是Debug版本去使用lib的Release或Debug下相應(yīng)文件
記得將所有引用的框架dll文件屬性下的復(fù)制到本地設(shè)置為false
WeiXinFactory,WeiXinPay 位于JsonModeshareDll下
代碼必using空間
using XNWebEngine.JsonBase;
using XNWebEngine;
using XNWebEngine.XNDBEngine;
using WeiXinFactory;
應(yīng)用模塊類的代碼實(shí)現(xiàn),應(yīng)用模塊可調(diào)用的框架函數(shù)見
public partial class HelloMode : BaseJsonMode
初始模塊函數(shù)
static public void SetJsonMode(string sPath, string sName)
{
//完成應(yīng)用模塊基本初始化工作
}
關(guān)于應(yīng)用模塊函數(shù)的屬性:
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson index(HttpContext ctx, Object m_Parame)
紅色部分為函數(shù)說明
CanNoLogin:當(dāng)true時(shí)表示該函數(shù)可未到登錄調(diào)用,為false時(shí)表示必須登錄調(diào)用默認(rèn)為false
CanEnable:當(dāng)true時(shí)表示該函數(shù)啟用,為false時(shí)表示該函數(shù)禁止調(diào)用,默認(rèn)為true
CanPost:當(dāng)true時(shí)表示該函數(shù)可Post方式啟用,為false時(shí)表示該函數(shù)禁止Post方式調(diào)用,默認(rèn)為true
CanGet:當(dāng)true時(shí)表示該函數(shù)可Get方式調(diào)用,為false時(shí)表示該函數(shù)禁止Get方式調(diào)用,默認(rèn)為true
CanThird:當(dāng)true時(shí)表示該函數(shù)可第三方調(diào)用,為false時(shí)表示該函數(shù)禁止第三方調(diào)用,默認(rèn)為false
CanClient:當(dāng)true時(shí)表示該函數(shù)可瀏覽器調(diào)用,為false時(shí)表示該函數(shù)禁止瀏覽器調(diào)用,默認(rèn)為true
CanP2P:當(dāng)true時(shí)表示該函數(shù)可其他服務(wù)調(diào)用,為false時(shí)表示該函數(shù)禁止其他服務(wù)調(diào)用,默認(rèn)為true
CanCrossDomain:當(dāng)true時(shí)表示該函數(shù)可跨域調(diào)用,為false時(shí)表示該函數(shù)禁止跨域調(diào)用,默認(rèn)為false
isAppFunction:當(dāng)true時(shí)表示該函數(shù)可App調(diào)用,為false時(shí)表示該函數(shù)禁止App調(diào)用,默認(rèn)為false
isEncFunction:當(dāng)true時(shí)表示該函數(shù)可P2P加密調(diào)用,為false時(shí)表示該函數(shù)禁止P2P加密調(diào)用,默認(rèn)為false
關(guān)于函數(shù)的分權(quán),根據(jù)實(shí)際使用中經(jīng)常會(huì)用到角色對(duì)各功能有不同的調(diào)用權(quán)限,該框架的應(yīng)用模塊采用五級(jí)分權(quán)模式,為方便權(quán)限配置和分權(quán)函數(shù)編寫,特定義不同權(quán)限函數(shù)采用不同的函數(shù)后綴
超級(jí)管理權(quán)限 函數(shù)后綴為_Any
行業(yè)代理權(quán)限 函數(shù)后綴為_HY
企業(yè)管理權(quán)限 函數(shù)后綴為_Company
企業(yè)部門權(quán)限 函數(shù)后綴為_Org
個(gè)人權(quán)限 函數(shù)后綴為_Person
特別注意所有外部調(diào)用的應(yīng)用模塊函數(shù)都是靜態(tài)函數(shù)
編寫一個(gè)分權(quán)函數(shù)例子如下如有個(gè)函數(shù)為Hello有五個(gè)分權(quán),那么我們編寫如下
static public ReturnJson Hello(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson=new ReturnJson();
try
{
if(HavePower(ctx,"HelloMode","Hello_Any",true).bOK)
{
return Hello_Any(ctx,m_Parame);
}
else
{
if(HavePower(ctx,"HelloMode","Hello_HY",true).bOK)
{
return Hello_HY(ctx,m_Parame);
}
else
{
if(HavePower(ctx,"HelloMode","Hello_Company",true).bOK)
{
return Hello_Company(ctx,m_Parame);
}
else
{
if(HavePower(ctx,"HelloMode","Hello_Any",true).bOK)
{
return Hello_Any(ctx,m_Parame);
}
else
{
if(HavePower(ctx,"HelloMode","Hello_Org",true).bOK)
{
return Hello_Org(ctx,m_Parame);
}
else
{
if(HavePower(ctx,"HelloMode","Hello_Person",true).bOK)
{
return Hello_Personctx,m_Parame);
}
else
{
}
}
}
}
}
}
}
catch(Exception e)
{
m_ReturnJson.bOK=false;
m_ReturnJson.sMsg="執(zhí)行異常";
}
return m_ReturnJson;
}
//各權(quán)限實(shí)現(xiàn)函數(shù)
//超級(jí)權(quán)限
static public ReturnJson Hello_Any(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson=new ReturnJson();
try
{
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);//獲得參數(shù)
//后續(xù)處理
}
catch
{
m_ReturnJson.bOK=false;
m_ReturnJson.sMsg="調(diào)用異常";
}
return m_ReturnJson;
}
//代理和超級(jí)代理權(quán)限
static public ReturnJson Hello_HY(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson=new ReturnJson();
try
{
if(HavePower(ctx,"CoreSYS.SYS","IsHYAdministrator",true).bOK)
{
//如是超級(jí)代理
return Hello_Any(ctx,m_Parame);
}
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);//獲得參數(shù)
//后續(xù)處理獲得登錄信息,判斷該用戶是否歸宿權(quán)限范圍
SessionLink m_SessionLink=GetSessionLink(ctx);
//判斷操作數(shù)據(jù)是否為代理企業(yè)
。。。
}
catch
{
m_ReturnJson.bOK=false;
m_ReturnJson.sMsg="調(diào)用異常";
}
return m_ReturnJson;
}
//企業(yè)權(quán)限
static public ReturnJson Hello_Company(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson=new ReturnJson();
try
{
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);//獲得參數(shù)
//后續(xù)處理獲得登錄信息,判斷該用戶是否歸宿權(quán)限范圍
SessionLink m_SessionLink=GetSessionLink(ctx);
//判斷操作數(shù)據(jù)是否為用戶企業(yè)
。。。
}
catch
{
m_ReturnJson.bOK=false;
m_ReturnJson.sMsg="調(diào)用異常";
}
return m_ReturnJson;
}
//部門權(quán)限
static public ReturnJson Hello_Org(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson=new ReturnJson();
try
{
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);//獲得參數(shù)
//后續(xù)處理獲得的登錄信息,判斷該用戶是否歸屬權(quán)限范圍
SessionLink m_SessionLink=GetSessionLink(ctx);
//判斷操作數(shù)據(jù)是否為用戶部門
}
catch
{
m_ReturnJson.bOK=false;
m_ReturnJson.sMsg="調(diào)用異常";
}
return m_ReturnJson;
}
//個(gè)人權(quán)限
static public ReturnJson Hello_Person(HttpContext ctx,Object m_Parame)
{
ReturnJson m_ReturnJson=new ReturnJson();
try
{
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);//獲得參數(shù)
//后續(xù)處理獲得的登錄信息,判斷該用戶是否歸屬權(quán)限范圍
SessionLink m_SessionLink=GetSessionLink(ctx);
//判斷操作數(shù)據(jù)是否為該用戶數(shù)據(jù)
}
catch
{
m_ReturnJson.bOK=false;
m_ReturnJson.sMsg="調(diào)用異常";
}
return m_ReturnJson;
}
對(duì)于分權(quán)函數(shù)可能有讀者認(rèn)為直接調(diào)用Hello_Any不就繞過了權(quán)限判斷嗎,在前面章節(jié)里已經(jīng)介紹,框架在反射調(diào)用函數(shù)時(shí)會(huì)判斷是否對(duì)該函數(shù)有執(zhí)行權(quán)限,
關(guān)于函數(shù)執(zhí)行權(quán)限的配置,首先通過后臺(tái)配置行業(yè)應(yīng)用模塊權(quán)限,然后對(duì)行業(yè)應(yīng)用模塊的函數(shù)執(zhí)行權(quán)限進(jìn)行配置,見下圖
選中應(yīng)用行業(yè)進(jìn)行綁定或解綁
對(duì)行業(yè)應(yīng)用函數(shù)進(jìn)行權(quán)限配置
對(duì)權(quán)限進(jìn)行具體配置
選中要配置的行業(yè),然后可批量配置超級(jí)權(quán)限,行業(yè)權(quán)限,企業(yè)權(quán)限,部門權(quán)限,個(gè)人權(quán)限,也可但多配置,勾選表示禁用
也可以配置時(shí)間范圍調(diào)用或調(diào)用次數(shù)限制配置
為便于快速生成應(yīng)用模塊本框架還編寫一個(gè)代碼工廠應(yīng)用模塊方便生成新的應(yīng)用模塊
按提示輸入相應(yīng)信息生成應(yīng)用模塊代碼框架
下集將繼續(xù)介紹應(yīng)用模塊編寫
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。