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