Abp學習筆記(一)

来源:https://www.cnblogs.com/zzqvq/archive/2018/12/18/10137658.html
-Advertisement-
Play Games

Application Services Application Services are used to expose domain logic to the presentation layer. An Application Service is called from the present ...


Application Services

Application Services are used to expose domain logic to the presentation layer. An Application Service is called from the presentation layer using a DTO (Data Transfer Object) as a parameter. It also uses domain objects to perform some specific business logic and returns a DTO back to the presentation layer. Thus, the presentation layer is completely isolated from Domain layer.

Application Services用於將域邏輯公開給表示層。使用DTO(數據傳輸對象)作為參數從表示層調用應用服務。它還使用域對象來執行某些特定的業務邏輯,並將DTO返回給表示層。因此,表示層與域層完全隔離。

在理想的分層應用程式中,表示層永遠不會直接使用域對象。

IApplicationService:

空介面,起到標識作用。所有實現了IApplicationService 的類都會被自動註入到容器中。所有IApplicationService對象都會被註入一些攔截器(例如:auditing, UnitOfWork等)以實現AOP

ApplicationService:

作為所有其他appservice的基類。其封裝了對AbpSession, Permission和Feature這些模塊的功能調用.

IAsyncCrudAppService 和 AsyncCrudAppService

ICrudAppService 和 CrudAppService

一個是介面 一個是介面的實現,字面上就可以猜測出意思,大概就是自動實現了 非同步增刪改查,同步增刪改查。也就是說 我們的介面繼承自它們 就可以實現增刪改查
官方給的解釋:
If you need to create an application service that will have Create, Update, Delete, Get, GetAll methods for a specific entity,
you can easily inherit from the CrudAppService class. You could also use the AsyncCrudAppService class to create async methods. The CrudAppService base class is generic, which gets the related Entity and DTO types as generic arguments. This is also extensible, allowing you to override functionality when you need to customize it.
如果需要創建具有Create,Update,Delete,Get,GetAll方法的應用程式服務,則可以輕鬆地從CrudAppService類繼承。您還可以使用AsyncCrudAppService類來創建非同步方法。CrudAppService基類是通用的,它將相關的Entity和 DTO類型作為泛型參數。這也是可擴展的,允許您在需要自定義時覆蓋功能。
此時:TestAppService 就具有 Create, Update, Delete, Get, GetAll 等方法了。

public class TestAppService : AsyncCrudAppService<Test, TestDto>
{
    public TaskAppService(IRepository<Task> repository) 
        : base(repository)
    {

    }
}

同時,ABP還會自動為我們創建控制器,因為在Web.Core的Module的PreInitialize方法中,有這樣一段方法,自動會為實現了 ApplicationService 的創建控制器,所以運行項目swagger上有xxxxservice 不用驚訝

  Configuration.Modules.AbpAspNetCore()
                 .CreateControllersForAppServices(
                     typeof(BlogApplicationModule).GetAssembly()
                 );

但是我們的TestAppService 明明實現的是 AsyncCrudAppService ,追過去看繼承鏈就知道了,最後還是繼承自ApplicationService

 public abstract class CrudAppServiceBase<TEntity, TEntityDto, TPrimaryKey, TGetAllInput, TCreateInput, TUpdateInput> : ApplicationService
        where TEntity : class, IEntity<TPrimaryKey>
        where TEntityDto : IEntityDto<TPrimaryKey>
        where TUpdateInput : IEntityDto<TPrimaryKey>

CRUD Permissions

如果想要對C R U D 方法 增加許可權的話,可以這樣寫。

public class TestAppService : AsyncCrudAppService<Test, TestDto>
{
    public TaskAppService(IRepository<Task> repository) 
        : base(repository)
    {
        CreatePermissionName = "Your Permission Name";
    }
}

其中 CreatePermissionName 是 CrudAppServiceBase(AsyncCrudAppService是它子類) 中定義的,其中還有 UpdatePermissionName DeletePermissionName GetAllPermissionName GetPermissionName

授權

上面說到了,許可權問題,那麼怎麼創建許可權呢?
很簡單
在我們的項目中,xxx.core 也就是領域層下有個文件夾,Authorization, 文件夾下有個 xxxAuthorizationProvider.cs 的類文件
打開 可以看的

    public class BlogAuthorizationProvider : AuthorizationProvider
    {
        public override void SetPermissions(IPermissionDefinitionContext context)
        {
            context.CreatePermission(PermissionNames.Pages_Users, L("Users"));
            context.CreatePermission(PermissionNames.Pages_Roles, L("Roles"));
            context.CreatePermission(PermissionNames.Pages_Tenants, L("Tenants"), multiTenancySides: MultiTenancySides.Host);
            context.CreatePermission(PermissionNames.Article_Create, L("ArticleCreate"));//這個是我自己添加的許可權。
             //第一個參數 是我們程式里需要的許可權名稱
             //第一個參數 是Display name 也就是我們後臺系統里看到的名字
        }

        private static ILocalizableString L(string name)
        {
            return new LocalizableString(name, BlogConsts.LocalizationSourceName);
        }
    }

PermissionNames是什麼呢?

    public static class PermissionNames
    {
        public const string Pages_Tenants = "Pages.Tenants";

        public const string Pages_Users = "Pages.Users";

        public const string Pages_Roles = "Pages.Roles";
        public const string Article_Create = "Article.Create";

    }

其實 就是個靜態類,裡面定義了許多常量 也就是我們許可權的名稱

如果我們想使用的話,有以下四個屬性:

  • 在Application 層中,我們使用 Abp.Authorization.AbpAuthorize屬性。
  • 在MVC控制器(Web層)中,我們使用 Abp.Web.Mvc.Authorization.AbpMvcAuthorize屬性。
  • 在ASP.NET Web API中,我們使用 Abp.WebApi.Authorization.AbpApiAuthorize屬性。
  • 在ASP.NET Core中,我們使用 Abp.AspNetCore.Mvc.Authorization.AbpMvcAuthorize屬性。
    [AbpAuthorize("your permissions")]

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Host startup hook,是2.2中提供的一項新的功能,通過使用主機啟動鉤子,允許開發人員在不修改代碼的情況下,在服務啟動之前註入代碼;通過使用鉤子,可以對已部署好的服務在服務啟動期間自定義托管程式的行為;通過使用鉤子,可以對服務進行跟蹤或者遙測,也可以在服務啟動前對托管環境進行健康檢查;... ...
  • " 【.NET Core項目實戰 統一認證平臺】開篇及目錄索引 " 上篇文章介紹了基於 客戶端授權的原理及如何實現自定義的客戶端授權,並配合網關實現了統一的授權異常返回值和許可權配置等相關功能,本篇將介紹密碼授權模式,從使用場景、源碼剖析到具體實現詳細講解密碼授權模式的相關應用。 .netcore項目 ...
  • 一、前言 這幾年前端的發展速度就像坐上了火箭,各種的框架一個接一個的出現,需要學習的東西越來越多,分工也越來越細,作為一個 .NET Web 程式猿,多瞭解瞭解行業的發展,讓自己擴展出新的技能樹,對自己的職業發展還是很有幫助的。畢竟,現在都快到9102年了,如果你還是只會 Web Form,或許還是 ...
  • 一、前言 準備寫這個系列文章的設想開始於今年9月,毫無意外,期間又又又又拖了很長時間,文章主要是為了記錄自己學習使用 ASP.NET Core Web API 與 Vue 創建一個前後端分離的項目的整個過程。嗯,2018年快要結束了,應該能在 .NET Core 3.0 正式版和 Vue 3.0 正 ...
  • 引用網址:http://support.microsoft.com/kb/182569/zh-cnInternet Explorer 安全區域設置存儲在以下註冊表子項下麵: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\In ...
  • Cenots7下安裝運行.NET Core、MicroSoft SQL Server 2019 preview 的基礎實踐 ...
  • 在Startup的ConfigureServices方法中加入需要依賴註入的東西。 每次從容器 中獲取的時候都是一個新的實例:services.AddTransient<ITransient, Transient>(); 每次從同一個容器中獲取的實例是相同的(一個請求內時同一個實例):service ...
  • .NET Core 可以以以下方式作為宿主運行: IIS 控制台 Windows服務 運行啟動代碼: public static void Main(string[] args) { try { LogCenter.Info("系統啟動"); LoadConfig(); bool isService ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...