數(shù)據(jù)權(quán)限在系統(tǒng)開(kāi)發(fā)階段,就應(yīng)該確定好。當(dāng)業(yè)務(wù)上將數(shù)據(jù)權(quán)限確定好之后,需要在代碼中將數(shù)據(jù)權(quán)限聲明給框架,讓框架知道,系統(tǒng)中有哪些數(shù)據(jù)權(quán)限。聲明的方式就是在Programe文件中的配置服務(wù)中
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureServices(x => { List pris = new List(); pris.Add(new DataPrivilegeInfo("公司權(quán)限", m => m.Name)); x.AddFrameworkService(dataPrivilegeSettings: pris); x.AddLayui(); }) .Configure(x => { x.UseFrameworkService(); }) .Build();配置如下代碼:
List pris = new List(); pris.Add(new DataPrivilegeInfo("公司權(quán)限", m => m.Name)); x.AddFrameworkService(dataPrivilegeSettings: pris);
當(dāng)數(shù)據(jù)權(quán)限有多個(gè)的時(shí)候,繼續(xù)在此添加即可,例如:
List pris = new List(); pris.Add(new DataPrivilegeInfo("公司權(quán)限", m => m.Name)); pris.Add(new DataPrivilegeInfo("部門(mén)權(quán)限", m => m.Name)); x.AddFrameworkService(dataPrivilegeSettings: pris);
通過(guò)上述配置后,系統(tǒng)可以知道有哪些數(shù)據(jù)權(quán)限。在新建數(shù)據(jù)權(quán)限過(guò)程中,"數(shù)據(jù)權(quán)限"字段的下拉列表中,會(huì)顯示出配置的數(shù)據(jù)權(quán)限的內(nèi)容。如圖:
選擇公司權(quán)限后,系統(tǒng)會(huì)將所有公司表中的數(shù)據(jù)顯示到"允許訪問(wèn)"字段中,所以,需要在公司表中添加業(yè)務(wù)數(shù)據(jù),之后可以通過(guò)勾選"允許訪問(wèn)"中的業(yè)務(wù)數(shù)據(jù),從而達(dá)到分配數(shù)據(jù)權(quán)限的目的。如圖:
分配數(shù)據(jù)權(quán)限可以分配到用戶(hù)組,也可以分配到單個(gè)用戶(hù)。"權(quán)限類(lèi)別"上選擇用戶(hù)組權(quán)限,即可分配到用戶(hù)組上,選擇用戶(hù)權(quán)限,即可分配到用戶(hù)上。
用戶(hù)組和用戶(hù)的輸入框具有模糊查詢(xún)的功能,便于用戶(hù)進(jìn)行選擇。如圖:
public class EmployeeSearcher : BaseSearcher
{
public List
AllCompanys { get; set; }
[Display(Name = "所屬公司")]
public Guid CompanyID { get; set; }
[Display(Name = "員工姓名")]
public String Name { get; set; }
[Display(Name = "員工性別")]
public SexEnum Sex { get; set; }
protected override void InitVM()
{
AllCompanys = DC.Set().GetSelectListItems(LoginUserInfo.DataPrivileges, null, y => y.Name);
}
}
查詢(xún)的數(shù)據(jù)列表通過(guò)DPWhere(LoginUserInfo.DataPrivileges,x=>x.CompanyID)方式根據(jù)數(shù)據(jù)權(quán)限過(guò)濾數(shù)據(jù)
public override IOrderedQueryable GetSearchQuery()
{
var query = DC.Set()
.CheckEqual(Searcher.CompanyID, x=>x.CompanyID)
.CheckContain(Searcher.Name, x=>x.Name)
.CheckEqual(Searcher.Sex, x=>x.Sex)
.DPWhere(LoginUserInfo.DataPrivileges,x=>x.CompanyID)
.Select(x => new Employee_View
{
ID = x.ID,
Name_view = x.Company.Name,
Name = x.Name,
Age = x.Age,
Sex = x.Sex,
})
.OrderBy(x => x.ID);
return query;
}
更多建議: