中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

詳解ABP框架的參數有效性驗證和權限驗證
來源:易賢網 閱讀:3533 次 日期:2016-08-06 13:30:39
溫馨提示:易賢網小編為您整理了“詳解ABP框架的參數有效性驗證和權限驗證”,方便廣大網友查閱!

參數有效性驗證

應用程序的輸入數據首先應該被檢驗是否有效。輸入的數據能被用戶或其他應用程序提交。在Web應用中,通常進行2次數據有效性檢驗:包括客戶端檢驗和服務端檢驗。客戶端的檢驗主要是使用戶有一個好的用戶體驗。 首先最好是在客戶端檢驗其表單輸入的有效性并且展示給客戶端的那些字段輸入是無效的。但是,服務器端的校驗是更關鍵和不可缺失的(不要只做客戶端檢驗而不做服務器端檢驗)。

服務器端的檢驗通常是被應用服務(層)執行,應用服務(層)中的方法首先檢驗數據的有效性,然后才使用這些通過驗證的數據。ABP的基礎設施提供了自動檢驗輸入數據有效性的方法。

應用服務(層)方法得到一個數據傳輸對象(DTO)作為輸入。ABP有一個IValidate的接口,DTO通過實現這個接口能夠檢驗數據的有效性。由于IInputDto擴展自IValidate,所以你可以直接實現IInputDto 接口來對數據傳輸對象(DTO)檢驗其有效性。

使用數據注解

ABP提供數據注解的特性。假設我們正在開發一個創建任務的應用服務并且得到了一個輸入,請看下面示例:

public class CreateTaskInput : IInputDto

{

  public int? AssignedPersonId { get; set; }

  [Required]

  public string Description { get; set; }

}

在這里,Description 屬性被標記為 Required。AssignedPersonId 是可選的。在 System.ComponentModel.DataAnnotations 命名空間中,還有很多這樣的特性 ( 例如: MaxLength, MinLength, RegularExpression 等等 )。

在System.ComponentModel.DataAnnotations 命名空間中,請看Task application service 的實現

public class TaskAppService : ITaskAppService

{

  private readonly ITaskRepository _taskRepository;

  private readonly IPersonRepository _personRepository;

  public TaskAppService(ITaskRepository taskRepository, IPersonRepository personRepository)

  {

    _taskRepository = taskRepository;

    _personRepository = personRepository;

  }

  public void CreateTask(CreateTaskInput input)

  {

    var task = new Task { Description = input.Description };

    if (input.AssignedPersonId.HasValue)

    {

      task.AssignedPerson = _personRepository.Load(input.AssignedPersonId.Value);

    }

    _taskRepository.Insert(task);

  }

}

正如你所看到的,這里沒有寫任何的數據驗證性代碼(指對Description屬性的驗證)因為ABP會自動去檢驗數據的有效性。ABP也會檢驗輸入數據是否為null。如果為空則會拋出AbpValidationException 異常。所以你不需要寫檢驗數據是否為null值的代碼。如果有任何屬性的輸入數據是無效的它也會拋出相同的異常。

這個機制近似于 ASP.NET MVC 的驗證功能,注意:這里的應用服務類不是繼承自Controller,它是用在Web應用的一個普通類。

自定義檢驗

如果數據注解的方式不能滿足你的需求,你可以實現ICustomValidate接口,請看下面示例:

public class CreateTaskInput : IInputDto, ICustomValidate

{

  public int? AssignedPersonId { get; set; }

  public bool SendEmailToAssignedPerson { get; set; }

  [Required]

  public string Description { get; set; }

  public void AddValidationErrors(List<ValidationResult> results)

  {

    if (SendEmailToAssignedPerson && (!AssignedPersonId.HasValue || AssignedPersonId.Value <= 0))

    {

      results.Add(new ValidationResult("AssignedPersonId must be set if SendEmailToAssignedPerson is true!"));

    }

  }

}

ICustomValidate 接口聲明了一個可被實現的AddValidationErrors方法。這里我們有一個叫做 SendEmailToAssignedPerson 的屬性。如果該屬性是真,AssignedPersonId 屬性會被檢驗是否有效,否則該屬性可以為空。如果有驗證錯誤,我們必須添加把這些驗證結果添加到結果集合中。(就是將ValidationResult 添加到results)

設置缺省值

在檢驗數據有效性后,我們需要執行一個額外的操作來整理DTO參數。ABP定義了一個IShouldNormalize接口,這個接口聲明了一個 Normalize的方法。如果你實現了這個接口,在檢驗數據有效性后,Normalize方法會被調用。假設我們的DTO需要一個排序方向的數據。如果這個Sorting屬性沒有被提供數據,那么在Normalize我們可以給Sorting設置一個缺省值。

public class GetTasksInput : IInputDto, IShouldNormalize

{

  public string Sorting { get; set; }

  public void Normalize()

  {

    if (string.IsNullOrWhiteSpace(Sorting))

    {

      Sorting = "Name ASC";

    }

  }

}

權限驗證

幾乎所有的企業級應用程序都會有不同級別的權限驗證。權限驗證是用于檢查用戶是否允許某些指定操作。Abp有基礎設施讓你來實現權限驗證。

注意:關于IPermissionChecker接口

Abp權限系統使用IPermissionChecker去檢查授權。同時你可以根據需要實現你自己的方式,在module-zero項目中已經完整實現了。如果IPermissionChecker沒有被實現,NullPermissionChecker會被使用于授權所有權限給每個人。

定義權限

在使用驗證權限前,我們需要為每一個操作定義唯一的權限。Abp的設計是基于模塊化,所以不同的模塊可以有不同的權限。為了定義權限,一個模塊應該創建AuthorizationProvider的派生類。MyAuthorizationProvider繼承自AuthorizationProvider,換句話說就是AuthorizationProvider派生出MyAuthorizationProvider。例子如下:

public class MyAuthorizationProvider : AuthorizationProvider

{

  public override void SetPermissions(IPermissionDefinitionContext context)

  {

    var administration = context.CreatePermission("Administration");

    var userManagement = administration.CreateChildPermission("Administration.UserManagement");

    userManagement.CreateChildPermission("Administration.UserManagement.CreateUser");

    var roleManagement = administration.CreateChildPermission("Administration.RoleManagement");

  }

}

IPermissionDefinitionContext 有方法去獲取和創建權限。

一個權限有以下屬性:

1.Name:系統范圍內的唯一名字。把它定義為一個字符串常量是個不錯的注意。我們傾向于將“.”分割不同的層級,但并不要求這么做。你可以設置你任何喜歡的名字。唯一的規則就是這個名字必須是唯一的。

2.Display Name:使用一個本地化的字符串去顯示權限到UI。

3.Description:和Display Name類似。

4.IsGrantedByDefault:此權限是否授權給(已登陸)所有用戶,除非顯示指定。通常設置為False(默認值)。

5.MultiTenancySides:對租戶應用程序,一個權限可以基于租戶或者主機(原文:host)。這是個枚舉標識,因此權限可以應用于不同方面(原文:Both Sides)。

一個權限可以有父權限和子權限。當然,這不會影響權限檢查,它只是在UI層對權限歸類有好處。創建authorizationprovider之后,我們應該在模塊的PreIntialize方法對它進行注冊。如下:

Configuration.Authorization.Providers.Add<MyAuthorizationProvider>()

authorizationprovider會自動注冊到依賴注入系統中。因此,authorization provider可以注入任何依賴(像是Repository)從而使用其他資源去創建權限定義。

檢查權限

1.使用AbpAuthorize特性(Using AbpAuthorize attribute)

AbpAuthorize(AbpMvcAuthorize 對應 MVC Controllers and AbpApiAuthorize 對應 Web API Controllers)特性是最簡單和常用的方法去檢查權限。請考慮如下application service方法:

[AbpAuthorize("Administration.UserManagement.CreateUser")]

public void CreateUser(CreateUserInput input)

{

  //A user can not execute this method if he is not granted for "Administration.UserManagement.CreateUser" permission.

}

沒有獲得“Administration.UserManagement.CreateUser”權限的用戶不能夠調用CreateUser。

AbpAuthorize 特性也檢查當前用戶是否登錄 (使用 IAbpSession.UserId)。因此,如果我們將某個方法聲明為AbpAuthorize 特性,它至少會檢查用戶是否登錄。代碼如下: [AbpAuthorize]

public void SomeMethod(SomeMethodInput input)

{

  //A user can not execute this method if he did not login.

}

2.AbpAuthorize屬性說明(AbpAuthorize attribute notes)

Abp使用動態方法攔截進行權限驗證。因此,使用AbpAuthorize特性的方法會有些限制。如下:

不能應用于私有(private)方法

不能應用于靜態(static)方法

不能應用于非注入(non-injected)類(我們必須用依賴注入)。

此外,

AbpAuthorize特性可以應用于任何的Public方法,如果此方法被接口調用(比如在Application Services中通過接口調用)

方法是虛(virtual)方法,如果此方法直接被類引用進行調用(像是ASP.NET MVC 或 Web API 的控制器)。

方式是虛(virtual)方法,如果此方法是protected。

注意:有三種AbpAuthorize 特性:

(1)在應用程序服務中(application layer),我們使用Abp.Authorization.AbpAuthorize;

(2)在MVC控制器(web layer)中,我們使用Abp.Web.Mvc.Authorization.AbpMvcAuthorize;

(3)在ASP.NET Web API,我們使用 Abp.WebApi.Authorization.AbpApiAuthorize。

這三個類繼承自不同的地方。

在MVC中,它繼承自MVC自己的Authorize類。

在Web API,它繼承自Web API 的Authorize類。因此,它最好是繼承到MVC和Web API中。

但是,在Application 層,它完全是由Abp自己實現沒有擴展子任何類。

3.使用IPermissionChecker

AbpAuthorize 適用于大部分的情況,但是某些情況下,我們還是需要自己在方法體里進行權限驗證。我們可以注入和使用IPermissionChecker對象。如下邊的代碼所示:

public void CreateUser(CreateOrUpdateUserInput input)

{

  if (!PermissionChecker.IsGranted("Administration.UserManagement.CreateUser"))

  {

    throw new AbpAuthorizationException("You are not authorized to create user!");

  }

  //A user can not reach this point if he is not granted for "Administration.UserManagement.CreateUser" permission.

}

當然,你可以寫入任何邏輯,由于IsGranted方法只是簡單返回true或false(它還有異步版本哦)。如你簡單的檢查一個權限并拋出一個異常如上邊代碼那樣,你可以用Authorize方法:

public void CreateUser(CreateOrUpdateUserInput input)

{

  PermissionChecker.Authorize("Administration.UserManagement.CreateUser");

  //A user can not reach this point if he is not granted for "Administration.UserManagement.CreateUser" permission.

}

由于權限驗證通常實現與Application層,ApplicationService基礎類注入和定義了PermissionChecker屬性。因此,權限檢查器允許你在Application Service類使用,而不需要顯示注入。

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美日韩高清在线播放| 免费在线国产精品| 欧美日韩国产另类不卡| 亚洲欧美卡通另类91av| 欧美无乱码久久久免费午夜一区| 欧美一区亚洲一区| 亚洲特黄一级片| 在线播放国产一区中文字幕剧情欧美| 国产精品海角社区在线观看| 欧美区日韩区| 欧美激情第五页| 欧美电影免费观看| 久久五月天婷婷| 久久精品国产亚洲aⅴ| 亚洲视频高清| 一区二区成人精品| 一区二区三区国产盗摄| 激情综合色综合久久综合| 国产精品视频网站| 欧美日韩在线另类| 欧美精品在线观看一区二区| 亚洲国产精品久久久久婷婷老年| 久久精品二区| 欧美三级午夜理伦三级中文幕| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美女人交a| 久久视频这里只有精品| 午夜精品理论片| 亚洲老板91色精品久久| 亚洲人在线视频| 最新国产精品拍自在线播放| 狠狠v欧美v日韩v亚洲ⅴ| 国产女人aaa级久久久级| 国产精品裸体一区二区三区| 欧美成人国产va精品日本一级| 久久乐国产精品| 欧美日韩三级| 国产精品成人va在线观看| 欧美三级日韩三级国产三级| 国产日韩精品一区二区三区| 国产精品无码永久免费888| 欧美性感一类影片在线播放| 欧美日韩色婷婷| 国产一区二区三区免费在线观看| 国产精品一区在线观看| 欧美激情网友自拍| 国产女主播一区| 国产一区二区黄色| 亚洲三级性片| 亚洲欧洲一区二区三区久久| 中文亚洲欧美| 午夜精品网站| 美女视频黄a大片欧美| 免费不卡在线视频| 亚洲第一综合天堂另类专| 亚洲理论在线| 亚洲欧美在线免费观看| 美女网站在线免费欧美精品| 欧美电影免费观看网站| 国产欧美一区二区视频| 在线免费精品视频| 午夜电影亚洲| 欧美a级片网| 国产精品久久久久久久久久免费| 亚洲国产高潮在线观看| 亚洲一级二级| 欧美男人的天堂| 影音欧美亚洲| 欧美激情视频网站| 国产亚洲欧美日韩精品| 亚洲经典在线看| 一区二区三区欧美激情| 亚洲国产精品va在看黑人| 艳妇臀荡乳欲伦亚洲一区| 欧美在线关看| 国产欧美日韩精品一区| 91久久久久久久久久久久久| 久久久久欧美精品| 国产精品高潮呻吟| 夜夜狂射影院欧美极品| 久久久久高清| 久久久精品国产免费观看同学 | 一级成人国产| 欧美国产视频在线观看| 国产乱肥老妇国产一区二| 亚洲无线视频| 欧美一区视频在线| 国产精品日韩欧美一区二区| 最新亚洲一区| 欧美日韩国内| 最新中文字幕亚洲| 欧美大片专区| 在线电影一区| 欧美福利视频在线| 在线播放视频一区| 亚洲午夜国产成人av电影男同| 欧美精品福利视频| 亚洲第一精品电影| 欧美成人中文字幕在线| 黑人操亚洲美女惩罚| 午夜在线成人av| 欧美午夜剧场| 一本久久综合亚洲鲁鲁五月天| 久久综合电影一区| 国模精品一区二区三区| 理论片一区二区在线| 激情综合网址| 欧美第十八页| 日韩视频欧美视频| 欧美成人久久| 中文亚洲欧美| 欧美色欧美亚洲另类七区| 午夜精品福利一区二区三区av | 国产一本一道久久香蕉| 久久资源av| 在线精品视频免费观看| 欧美福利电影在线观看| 亚洲精品视频在线| 国产精品免费视频xxxx | 伊人夜夜躁av伊人久久| 欧美~级网站不卡| 91久久精品一区二区别| 欧美视频你懂的| 亚洲一区二区三区久久| 国模私拍一区二区三区| 久久久综合视频| 中日韩在线视频| 国产精品区一区二区三区| 小处雏高清一区二区三区 | 亚洲黄色av一区| 久久―日本道色综合久久| 国产欧美短视频| 欧美韩日一区| 一区二区高清| 在线精品在线| 欧美精品在线免费观看| 欧美在线视频观看免费网站| 韩国精品久久久999| 欧美视频专区一二在线观看| 亚洲先锋成人| 亚洲国产精品电影在线观看| 欧美激情小视频| 日韩午夜电影在线观看| 国内精品免费午夜毛片| 欧美成人国产va精品日本一级| 亚洲欧美日韩国产成人精品影院| 国产精品免费一区二区三区观看| 美女被久久久| 一区二区三区www| 亚洲成人在线视频播放| 欧美日韩国产在线| 久久亚洲风情| 9国产精品视频| 国产精品日产欧美久久久久| 欧美成人福利视频| 亚洲欧美激情四射在线日 | 久久精品国产免费观看| 激情另类综合| 国产欧美婷婷中文| 欧美激情1区| 欧美a级片网站| 午夜亚洲影视| 久久成人精品一区二区三区| 亚洲精品色婷婷福利天堂| 在线成人av网站| 国产精品扒开腿做爽爽爽视频| 欧美激情偷拍| 国产精品成人国产乱一区| 美女国产一区| 亚洲高清123| 欧美激情精品久久久久久久变态| 国产精品99久久久久久宅男 | 欧美在现视频| 99天天综合性| 18成人免费观看视频| 国产精品久久毛片a| 欧美大片专区| 欧美国产欧美综合| 免费在线观看一区二区| 国产欧美日韩不卡免费| 欧美激情导航| 欧美日韩国产高清| 久久综合色88| 欧美jizz19性欧美| 久久久久久**毛片大全| 久久一区免费| 欧美国产1区2区| 久久亚洲高清| 国产精品国产三级国产专播精品人 | 国产精品乱人伦一区二区| 狂野欧美激情性xxxx欧美| 久久久免费精品| 欧美在线观看视频| 久久精品日韩一区二区三区| 亚洲欧美日韩国产精品| 久久精品在线视频| 欧美一区二区免费观在线| 久久久亚洲欧洲日产国码αv| 午夜久久久久| 麻豆精品在线视频|