//有以下幾個物件:
//1、業務表單
public partial class FrmBranch : BaseDock
{
private PermissionsController Permissions { get; set; }
public FrmBranch()
{
InitializeComponent();
Permissions = new PermissionsController(this); //權限控制類
//根據權限屏蔽功能物件
InitAutothorizedUI();
}
}
//2、權限類
public class PermissionsController
{
private BaseDock Basedock { get; set; }
private BaseForm Baseform { get; set; }
/// <summary>
/// 功能模塊名稱
/// </summary>
public string Itemno { get; set; }
public PermissionsController(BaseDock frm)
{
Basedock = frm;
GetItemno();
}
public PermissionsController(BaseForm frm)
{
Baseform = frm;
GetItemno();
}
/// <summary>
/// 檢查用戶功能級權限
/// </summary>
/// <param name="itemno"></param>
public bool CheckUserFuncAuth()
{
//是否具備功能模塊權限
bool IsAuthorization = false;
//判斷查詢權限
if (Basedock != null)
if (!Basedock.GetLiminf(Portal.gc.UserInfo.Logno, Itemno, "aaaa"))
{
IsAuthorization = true;
MessageDxUtil.ShowWarning("當前賬戶【" + Portal.gc.UserInfo.Logno + "】沒有查詢權限,請聯系系統管理員!");
}
if (Baseform != null)
if (!Baseform.GetLiminf(Portal.gc.UserInfo.Logno, Itemno, "brow"))
{
IsAuthorization = true;
throw new ArgumentException("當前賬戶【" + Portal.gc.UserInfo.Logno + "】沒有查詢權限,請聯系系統管理員!");
}
return IsAuthorization;
}
/// <summary>
/// 獲取當前類模塊名稱
/// </summary>
/// <returns></returns>
private void GetItemno()
{
if (Basedock != null)
Itemno = BusinessHelper.GetRemovePrefixString(Basedock.Name, "Frm");
if (Baseform != null)
Itemno = BusinessHelper.GetRemovePrefixString(Baseform.Name, "Frm");
}
}
由于表單是動態實體化加載的,當CheckUserFuncAuth()方法,為True時,終止FrmBranch表單的物體化,這個要怎么控制實作,請教大神。
uj5u.com熱心網友回復:
終止?終止不了。你想結束 xxx xx=new xxx();這是反邏輯的,所以你能做的只能是 throw一個例外出來,這樣這個new就直接例外了。當然這是反邏輯,反模式操作
正向邏輯,正向模式操作如下(我以netcore以后的Ihost通用主機系統作為例子,因為我不想總糾結于過去20年的那些東西,而你們未來也必定會接觸他,比如maui)
從netcore開始說,用戶登錄以后是一個sope生存期。而你的表單也必定依賴這個用戶背景關系。所以他最終設計成
class 用戶背景關系
{ Isope sope;
用戶背景關系(iserviceprovdier provider)
public void 登錄()
{
sope provider.newsope()
}
public list<業務表單> 業務表單=>{ retrn 業務表單.getService<I業務表單>().where (p=>p(this)) } //當前用戶背景關系具備權限的表單
}
Service.Add<I業務表單,表單1>()//注冊所有表單
service.AddSocpe<用戶背景關系>
service.AddSocpe<list<業務表單>>(p=>p.用戶背景關系.業務表單) //根據用戶背景關系過濾業務表單
純手寫設計,只代表未來在通用主機Ihost這種模式下怎么設計系統的思路(不代表你可以直接敲到vs里),俺們稍微放遠點這樣才能適合未來不被抹殺(從現在就應該接觸并理解他們,不要過幾年被新人們直接給擠出了)------------很明顯在這種通用主機ihost模式下,你會更清楚自己在干嘛,你會容易在正確的地方寫正確的結構,所以他具備未來的普適性也更容易被未來的新人接受(當然不肯接受的老人們只能離開了)
uj5u.com熱心網友回復:
new PermissionsController(this);你自然可以在PermissionsController 中對 傳入的 FrmBranch 實體做任何操作,包括銷毀
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/282503.html
標籤:C#
上一篇:WebSocket握手時出錯
