數(shù)據(jù)權(quán)限在系統(tǒng)開發(fā)階段,就應(yī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);
當數(shù)據(jù)權(quán)限有多個的時候,繼續(xù)在此添加即可,例如:
List pris = new List(); pris.Add(new DataPrivilegeInfo("公司權(quán)限", m => m.Name)); pris.Add(new DataPrivilegeInfo("部門權(quán)限", m => m.Name)); x.AddFrameworkService(dataPrivilegeSettings: pris);
通過上述配置后,系統(tǒng)可以知道有哪些數(shù)據(jù)權(quán)限。在新建數(shù)據(jù)權(quán)限過程中,"數(shù)據(jù)權(quán)限"字段的下拉列表中,會顯示出配置的數(shù)據(jù)權(quán)限的內(nèi)容。如圖:
選擇公司權(quán)限后,系統(tǒng)會將所有公司表中的數(shù)據(jù)顯示到"允許訪問"字段中,所以,需要在公司表中添加業(yè)務(wù)數(shù)據(jù),之后可以通過勾選"允許訪問"中的業(yè)務(wù)數(shù)據(jù),從而達到分配數(shù)據(jù)權(quán)限的目的。如圖:
分配數(shù)據(jù)權(quán)限可以分配到用戶組,也可以分配到單個用戶。"權(quán)限類別"上選擇用戶組權(quán)限,即可分配到用戶組上,選擇用戶權(quá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);
}
}
查詢的數(shù)據(jù)列表通過DPWhere(LoginUserInfo.DataPrivileges,x=>x.CompanyID)方式根據(jù)數(shù)據(jù)權(quán)限過濾數(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;
}
更多建議: