Tạo chatbot với CHAT GPT sử dụng C#
Trong hướng dẫn này, chúng ta sẽ đi sâu vào quá trình xây dựng chatbot bằng ChatGPT và C#. Chúng tôi sẽ đề cập đến mọi thứ, từ thiết lập quyền truy cập API ChatGPT đến triển khai chatbot của bạn. Bắt đầu nào!
Tin đọc nhiều
Mình sẽ tóm tắt sơ lược các tầng để cho các bạn đọc chi tiết bên dưới đỡ bị loạn.
Bài viết liên quan: Microservice là gì? Ưu nhược điểm khi xài Microservice.
Các công cụ sau sẽ được cài đặt trên máy phát triển của bạn:
Visual Studio 2019 (v16.8 +) dành cho Windows / Visual Studio dành cho Mac . 1
Yarn v1.20 + (không phải v2) 2 hoặc npm v6 + (đã được cài đặt với Node)
1 Bạn có thể sử dụng một trình soạn thảo khác thay vì Visual Studio miễn là nó hỗ trợ .NET Core và ASP.NET Core. ↩
2 Yarn v2 hoạt động khác nhau và không được hỗ trợ. ↩
ABP CLI là một giao diện dòng lệnh được sử dụng để tự động hóa một số tác vụ phổ biến cho các giải pháp dựa trên ABP. Trước tiên, bạn cần cài đặt ABP CLI bằng lệnh sau:
Nếu bạn đã cài đặt, bạn có thể cập nhật nó bằng lệnh sau:
Sử dụng new
lệnh của ABP CLI để tạo một dự án mới:
Bạn có thể sử dụng các cấp độ không gian tên khác nhau; ví dụ: BookStore, Acme.BookStore hoặc Acme.Retail.BookStore.
Kiểm tra chuỗi kết nối trong appsettings.json
tệp trong .HttpApi.Host
dự án
Giải pháp được định cấu hình để sử dụng Entity Framework Core với MS SQL Server theo mặc định. EF Core hỗ trợ các nhà cung cấp cơ sở dữ liệu khác nhau , vì vậy bạn có thể sử dụng bất kỳ DBMS nào được hỗ trợ. Xem tài liệu tích hợp Khung thực thể để tìm hiểu cách chuyển sang một DBMS khác .
Giải pháp sử dụng Entity Framework Core Code Core Di chuyển đầu tiên . Vì vậy, bạn cần áp dụng chuyển đổi để tạo cơ sở dữ liệu. Có hai cách để áp dụng di chuyển cơ sở dữ liệu.
Giải pháp đi kèm với một .DbMigrator
ứng dụng bảng điều khiển áp dụng di chuyển và cũng tạo ra dữ liệu ban đầu . Nó hữu ích cho sự phát triển cũng như môi trường sản xuất .
.DbMigrator
dự án có riêng của nóappsettings.json
. Vì vậy, nếu bạn đã thay đổi chuỗi kết nối ở trên, bạn cũng nên thay đổi chuỗi này.
Nhấp chuột phải vào .DbMigrator
dự án và chọn Đặt làm Dự án StartUp
Nhấn F5 (hoặc Ctrl + F5) để chạy ứng dụng. Nó sẽ có đầu ra như hình dưới đây:
Dữ liệu hạt giống ban đầu tạo ra
admin
người dùng trong cơ sở dữ liệu (với mật khẩu là1q2w3E*
), sau đó được sử dụng để đăng nhập vào ứng dụng. Vì vậy, bạn cần sử dụng.DbMigrator
ít nhất một lần cho một cơ sở dữ liệu mới.
Ef Core có Update-Database
lệnh tạo cơ sở dữ liệu nếu cần và áp dụng các di chuyển đang chờ xử lý.
Nhấp chuột phải vào .HttpApi.Host
dự án và chọn Đặt làm Dự án StartUp :
Mở Bảng điều khiển Trình quản lý Gói , chọn .EntityFrameworkCore.DbMigrations
dự án làm Dự án Mặc định và chạy Update-Database
lệnh:
Thao tác này sẽ tạo cơ sở dữ liệu mới dựa trên chuỗi kết nối đã định cấu hình.
Sử dụng
.DbMigrator
công cụ là cách được đề xuất , vì nó cũng tạo ra dữ liệu ban đầu để có thể chạy đúng ứng dụng web.Nếu bạn chỉ sử dụng
Update-Database
lệnh, bạn sẽ có một cơ sở dữ liệu trống, vì vậy bạn không thể đăng nhập vào ứng dụng vì không có người dùng quản trị ban đầu trong cơ sở dữ liệu. Bạn có thể sử dụngUpdate-Database
lệnh trong thời gian phát triển khi bạn không cần phải seed cơ sở dữ liệu. Tuy nhiên, việc sử.DbMigrator
dụng ứng dụng này dễ dàng hơn và bạn luôn có thể sử dụng nó để di chuyển lược đồ và khởi tạo cơ sở dữ liệu.
Đảm bảo rằng .HttpApi.Host
dự án là dự án khởi động và chạy ứng dụng sẽ mở giao diện người dùng Swagger:
Sử dụng Ctrl + F5 trong Visual Studio (thay vì F5) để chạy ứng dụng mà không cần gỡ lỗi. Nếu bạn không có mục đích gỡ lỗi, việc này sẽ nhanh hơn.
Bạn có thể xem các API ứng dụng và kiểm tra chúng tại đây. Nhận thêm thông tin về giao diện người dùng Swagger.
Đi tới angular
thư mục, mở một thiết bị đầu cuối dòng lệnh, nhập yarn
lệnh (chúng tôi đề xuất với người quản lý gói sợi trong khi npm install
cũng sẽ hoạt động)
Khi tất cả các mô-đun nút được tải, hãy thực hiện lệnh yarn start
(hoặc npm start
):
Có thể mất nhiều thời gian hơn cho lần xây dựng đầu tiên. Sau khi hoàn tất, nó sẽ mở giao diện người dùng Angular trong trình duyệt mặc định của bạn với địa chỉ localhost: 4200 .
Nhập admin làm tên người dùng và 1q2w3E * làm mật khẩu để đăng nhập vào ứng dụng. Ứng dụng đang hoạt động. Bạn có thể bắt đầu phát triển ứng dụng của mình dựa trên mẫu khởi động này.
Lớp miền trong mẫu khởi động được tách thành hai dự án:
Acme.BookStore.Domain
chứa các thực thể , dịch vụ miền và các đối tượng miền cốt lõi khác của bạn.Acme.BookStore.Domain.Shared
chứa constants
, enums
hoặc các đối tượng miền khác liên quan đến những người có thể được chia sẻ với khách hàng.Vì vậy, hãy xác định các thực thể của bạn trong lớp miền ( Acme.BookStore.Domain
dự án) của giải pháp.
Thực thể chính của ứng dụng là Book
. Tạo một Books
thư mục (không gian tên) trong Acme.BookStore.Domain
dự án và thêm một Book
lớp bên trong nó:
AggregateRoot
và Entity
. Aggregate Root là một khái niệm Thiết kế theo hướng miền có thể được coi là một thực thể gốc được truy vấn và làm việc trực tiếp (xem tài liệu về các thực thể để biết thêm).Book
kế thừa thực thể từ AuditedAggregateRoot
đó cho biết thêm một số cơ sở kiểm toán tài sản (như CreationTime
, CreatorId
, LastModificationTime
...) trên đầu trang của AggregateRoot
lớp. ABP tự động quản lý các thuộc tính này cho bạn.Guid
là loại khóa chính của Book
thực thể.Hướng dẫn này để lại các thuộc tính thực thể với public get / set vì mục đích đơn giản. Xem tài liệu thực thể nếu bạn tìm hiểu thêm về các phương pháp hay nhất về DDD.
Thực Book
thể sử dụng BookType
enum. Tạo một Books
thư mục (không gian tên) trong Acme.BookStore.Domain.Shared
dự án và thêm BookType
vào bên trong dự án :
Cấu trúc thư mục / tệp cuối cùng sẽ như hình dưới đây:
EF Core yêu cầu liên kết các thực thể với của bạn DbContext
. Cách dễ nhất để làm điều này là thêm một thuộc DbSet
tính vào BookStoreDbContext
lớp trong Acme.BookStore.EntityFrameworkCore
dự án, như được hiển thị bên dưới:
Mở BookStoreDbContextModelCreatingExtensions.cs
tệp trong Acme.BookStore.EntityFrameworkCore
dự án và thêm mã ánh xạ cho Book
thực thể. Lớp cuối cùng phải như sau:
BookStoreConsts
có giá trị không đổi cho lược đồ và tiền tố bảng cho bảng của bạn. Bạn không cần phải sử dụng nó, nhưng được đề xuất để kiểm soát các tiền tố bảng ở một điểm duy nhất.ConfigureByConvention()
phương thức cấu hình / ánh xạ các thuộc tính kế thừa một cách duyên dáng. Luôn sử dụng nó cho tất cả các thực thể của bạn.Mẫu khởi động sử dụng EF Core Code First Migrations để tạo và duy trì lược đồ cơ sở dữ liệu. Mở Bảng điều khiển Trình quản lý Gói (PMC) trong menu Công cụ> Trình quản lý Gói NuGet .
Chọn Acme.BookStore.EntityFrameworkCore.DbMigrations
làm dự án mặc định và thực hiện lệnh sau:
Điều này sẽ tạo ra một lớp di chuyển mới bên trong Migrations
thư mục của Acme.BookStore.EntityFrameworkCore.DbMigrations
dự án.
Trước khi cập nhật cơ sở dữ liệu, hãy đọc phần bên dưới để tìm hiểu cách chuyển một số dữ liệu ban đầu vào cơ sở dữ liệu.
Nếu bạn đang sử dụng một IDE khác với Visual Studio, bạn có thể sử dụng
dotnet-ef
công cụ như được ghi ở đây .
Thật tốt khi có một số dữ liệu ban đầu trong cơ sở dữ liệu trước khi chạy ứng dụng. Phần này giới thiệu hệ thống Gieo dữ liệu của khuôn khổ ABP. Bạn có thể bỏ qua phần này nếu bạn không muốn tạo dữ liệu hạt giống, nhưng bạn nên làm theo để tìm hiểu tính năng ABP Framework hữu ích này.
Tạo một lớp dẫn xuất từ IDataSeedContributor
trong *.Domain
dự án bằng cách sao chép mã sau:
IRepository<Book, Guid>
( kho lưu trữ mặc định ) để chèn hai cuốn sách vào cơ sở dữ liệu, nếu hiện tại không có cuốn sách nào trong cơ sở dữ liệu.Chạy Acme.BookStore.DbMigrator
ứng dụng để cập nhật cơ sở dữ liệu:
.DbMigrator
là một ứng dụng bảng điều khiển có thể được chạy để di chuyển lược đồ cơ sở dữ liệu và bắt nguồn dữ liệu trên môi trường phát triển và sản xuất .
Lớp ứng dụng được tách thành hai dự án:
Acme.BookStore.Application.Contracts
chứa DTO của bạn và các giao diện dịch vụ ứng dụng .Acme.BookStore.Application
chứa các triển khai các dịch vụ ứng dụng của bạn.Trong phần này, bạn sẽ tạo một dịch vụ ứng dụng để lấy, tạo, cập nhật và xóa sách bằng cách sử dụng CrudAppService
lớp cơ sở của Khung ABP.
CrudAppService
lớp cơ sở yêu cầu xác định DTO cơ bản cho thực thể. Tạo một Books
thư mục (không gian tên) trong Acme.BookStore.Application.Contracts
dự án và thêm một BookDto
lớp bên trong nó:
BookDto
được sử dụng để chuyển dữ liệu sách sang lớp trình bày nhằm hiển thị thông tin sách trên giao diện người dùng.BookDto
được bắt nguồn từ AuditedEntityDto<Guid>
có các thuộc tính kiểm toán giống như Book
đơn vị được xác định ở trên.Nó sẽ cần thiết để ánh xạ Book
các thực thể thành BookDto
các đối tượng trong khi trả sách về lớp trình bày. Thư viện AutoMapper có thể tự động chuyển đổi này khi bạn xác định ánh xạ thích hợp. Mẫu khởi động đi kèm với AutoMapper được định cấu hình trước. Vì vậy, bạn chỉ có thể xác định ánh xạ trong BookStoreApplicationAutoMapperProfile
lớp trong Acme.BookStore.Application
dự án:
Xem tài liệu ánh xạ đối tượng với đối tượng để biết chi tiết.
Tạo một CreateUpdateBookDto
lớp trong Books
thư mục (không gian tên) của Acme.BookStore.Application.Contracts
dự án:
DTO
lớp được sử dụng để có được thông tin sách từ người sử dụng giao diện trong khi tạo hoặc cập nhật một cuốn sách.[Required]
) để xác định tính hợp lệ cho các thuộc tính. DTO
s được tự động xác nhận bởi khung ABP.Giống như đã thực hiện BookDto
ở trên, chúng ta nên xác định ánh xạ từ CreateUpdateBookDto
đối tượng đến Book
thực thể. Lớp cuối cùng sẽ như hình dưới đây:
Bước tiếp theo là xác định giao diện cho dịch vụ ứng dụng. Tạo IBookAppService
giao diện trong Books
thư mục (không gian tên) của Acme.BookStore.Application.Contracts
dự án:
ICrudAppService
định nghĩa chung CRUD phương pháp: GetAsync
, GetListAsync
, CreateAsync
, UpdateAsync
và DeleteAsync
. Nó không bắt buộc phải mở rộng nó. Thay vào đó, bạn có thể kế thừa từ IApplicationService
giao diện trống và xác định các phương thức của riêng bạn theo cách thủ công (sẽ được thực hiện cho các tác giả trong các phần tiếp theo).ICrudAppService
đó bạn có thể sử dụng các DTO riêng biệt cho từng phương pháp (như sử dụng các DTO khác nhau để tạo và cập nhật).Đã đến lúc thực hiện IBookAppService
giao diện. Tạo một lớp mới, được đặt tên BookAppService
trong Books
không gian tên (thư mục) của Acme.BookStore.Application
dự án:
BookAppService
có nguồn gốc từ CrudAppService<...>
đó thực thi tất cả các phương thức CRUD (tạo, đọc, cập nhật, xóa) được định nghĩa bởi ICrudAppService
.BookAppService
tiêm IRepository<Book, Guid>
là kho lưu trữ mặc định cho Book
thực thể. ABP tự động tạo kho lưu trữ mặc định cho mỗi gốc (hoặc thực thể) tổng hợp. Xem tài liệu kho lưu trữ .BookAppService
sử dụng IObjectMapper
dịch vụ ( xem ) để ánh xạ Book
đối tượng với BookDto
đối tượng và CreateUpdateBookDto
đối tượng với Book
đối tượng. Mẫu Khởi động sử dụng thư viện AutoMapper làm nhà cung cấp ánh xạ đối tượng. Chúng tôi đã xác định các ánh xạ trước đó, vì vậy nó sẽ hoạt động như mong đợi.Trong ứng dụng ASP.NET Core điển hình, bạn tạo Bộ điều khiển API để hiển thị các dịch vụ ứng dụng dưới dạng điểm cuối API HTTP . Điều này cho phép các trình duyệt hoặc máy khách bên thứ 3 gọi chúng qua HTTP.
ABP có thể tự động định cấu hình các dịch vụ ứng dụng của bạn dưới dạng Bộ điều khiển API MVC theo quy ước.
Mẫu khởi động được định cấu hình để chạy giao diện người dùng Swagger bằng thư viện Swashbuckle.AspNetCore . Chạy ứng dụng ( Acme.BookStore.HttpApi.Host
) bằng cách nhấn CTRL+F5
và điều hướng đến https://localhost:<port>/swagger/
trên trình duyệt của bạn. Thay thế <port>
bằng số cổng của riêng bạn.
Bạn sẽ thấy một số điểm cuối dịch vụ tích hợp sẵn cũng như Book
dịch vụ và các điểm cuối kiểu REST của nó:
Swagger có một giao diện đẹp để kiểm tra các API.
Nếu bạn cố gắng thực thi [GET] /api/app/book
API để lấy danh sách sách, máy chủ sẽ trả về kết quả JSON như vậy:
Điều đó khá tuyệt vì chúng tôi chưa viết một dòng mã nào để tạo bộ điều khiển API, nhưng bây giờ chúng tôi có một API REST hoạt động đầy đủ!
Trước khi bắt đầu phát triển giao diện người dùng, trước tiên chúng tôi muốn chuẩn bị các văn bản bản địa hóa (bạn thường làm điều này khi cần trong khi phát triển ứng dụng của mình).
Văn bản bản địa hóa nằm trong Localization/BookStore
thư mục của Acme.BookStore.Domain.Shared
dự án:
Mở tệp en.json
( bản dịch tiếng Anh ) và thay đổi nội dung như bên dưới:
Menu:
tiền tố cho các mục menu.Enum:<enum-type>:<enum-value>
quy ước đặt tên để bản địa hóa các thành viên enum. Khi bạn làm như vậy, ABP có thể tự động khoanh vùng các enum trong một số trường hợp thích hợp.Nếu một văn bản không được xác định trong tệp bản địa hóa, thì nó sẽ dự phòng cho khóa bản địa hóa (như hành vi tiêu chuẩn của ASP.NET Core).
Hệ thống bản địa hóa của ABP được xây dựng dựa trên hệ thống bản địa hóa tiêu chuẩn của ASP.NET Core và mở rộng nó theo nhiều cách. Xem tài liệu bản địa hóa để biết chi tiết.
Lưu ý: Hướng dẫn này dựa trên ABP Framework v3.1.0 + Nếu phiên bản dự án của bạn cũ hơn, hãy nâng cấp giải pháp của bạn. Xem hướng dẫn di chuyển nếu bạn đang nâng cấp một dự án hiện có với v2.x.
Nếu bạn chưa làm điều đó trước đây, hãy mở giao diện dòng lệnh mới (cửa sổ đầu cuối) và chuyển đến angular
thư mục của bạn , sau đó chạy yarn
lệnh để cài đặt gói NPM:
Đã đến lúc tạo ra thứ gì đó có thể nhìn thấy và sử dụng được! Có một số công cụ mà chúng tôi sẽ sử dụng khi phát triển ứng dụng Angular frontend:
Chạy dòng lệnh sau để tạo một mô-đun mới, có tên BookModule
trong thư mục gốc của ứng dụng góc:
Lệnh này sẽ tạo ra kết quả sau:
Mở /src/app/book/book.module.ts
và thay thế nội dung như hình dưới đây:
SharedModule
. SharedModule
xuất một số mô-đun chung cần thiết để tạo giao diện người dùng.SharedModule
đã xuất khẩu CommonModule
, vì vậy chúng tôi đã xóa CommonModule
.Mã được tạo đặt định nghĩa tuyến đường mới vào src/app/app-routing.module.ts
tệp như được hiển thị bên dưới:
Bây giờ, mở src/app/route.provider.ts
tệp thay thế configureRoutes
khai báo hàm như hình dưới đây:
RoutesService
là một dịch vụ do ABP Framework cung cấp để cấu hình menu chính và các tuyến đường.
path
là URL của tuyến đường.name
là tên mục menu được bản địa hóa (xem tài liệu bản địa hóa để biết thêm chi tiết).iconClass
là biểu tượng của mục menu (bạn có thể sử dụng biểu tượng Font Awesome theo mặc định).order
là thứ tự của mục menu.layout
là cách bố trí các tuyến đường của BooksModule (có ba loại bố trí được xác định trước: eLayoutType.application
, eLayoutType.account
hoặc eLayoutType.empty
).Để biết thêm thông tin, hãy xem tài liệu RoutesService .
ABP CLI cung cấp generate-proxy
lệnh tạo proxy ứng dụng khách cho các API HTTP của bạn để dễ dàng sử dụng các API HTTP của bạn từ phía máy khách. Trước khi chạy generate-proxy
lệnh, máy chủ của bạn phải được thiết lập và chạy.
Chạy lệnh sau trong angular
thư mục:
Lệnh này sẽ tạo các tệp sau trong /src/app/proxy/books
thư mục:
Mở /src/app/book/book.component.ts
tệp và thay thế nội dung như bên dưới:
BookService
.Mở /src/app/book/book.component.html
và thay thế nội dung như sau:
Bây giờ bạn có thể xem kết quả cuối cùng trên trình duyệt của mình:
Trong phần này, bạn sẽ học cách tạo một biểu mẫu hộp thoại phương thức mới để tạo một cuốn sách mới.
Mở /src/app/book/book.component.ts
và thay thế nội dung như bên dưới:
isModalOpen
và một phương thức được gọi createBook
.Mở /src/app/book/book.component.html
và thực hiện các thay đổi sau:
New book
nút vào tiêu đề thẻ ..abp-modal
phương thức hiển thị một phương thức để cho phép người dùng tạo một cuốn sách mới. abp-modal
là một thành phần được tạo sẵn để hiển thị các phương thức. Mặc dù bạn có thể sử dụng cách tiếp cận khác để hiển thị một phương thức, abp-modal
cung cấp các lợi ích bổ sung.Bạn có thể mở trình duyệt của mình và nhấp vào nút Sách mới để xem phương thức mới.
Biểu mẫu phản ứng cung cấp cách tiếp cận theo hướng mô hình để xử lý các đầu vào biểu mẫu có giá trị thay đổi theo thời gian.
Mở /src/app/book/book.component.ts
và thay thế nội dung như bên dưới:
FormGroup
, FormBuilder
và Validators
từ @angular/forms
.form: FormGroup
tài sản.bookTypes
tài sản dưới dạng danh sách các BookType
thành viên enum. Điều đó sẽ được sử dụng trong các tùy chọn biểu mẫu.FormBuilder
vào hàm tạo. FormBuilder cung cấp các phương pháp thuận tiện để tạo điều khiển biểu mẫu. Nó làm giảm số lượng boilerplate cần thiết để xây dựng các biểu mẫu phức tạp.buildForm
phương thức vào cuối tệp và thực thi phương thức buildForm()
trong createBook
phương thức.save
phương thức.Mở /src/app/book/book.component.html
và thay thế <ng-template #abpBody> </ng-template>
bằng phần mã sau:
Cũng thay thế <ng-template #abpFooter> </ng-template>
bằng phần mã sau:
Chúng tôi đã sử dụng trình chọn ngày NgBootstrap trong thành phần này. Vì vậy, cần sắp xếp các phụ thuộc liên quan đến thành phần này.
Mở /src/app/book/book.module.ts
và thay thế nội dung như bên dưới:
NgbDatepickerModule
để có thể sử dụng công cụ chọn ngày.Mở /src/app/book/book.component.ts
và thay thế nội dung như bên dưới:
NgbDateNativeAdapter
và NgbDateAdapter
.NgbDateAdapter
có thể chuyển đổi giá trị Datepicker thành Date
loại. Xem bộ điều hợp datepicker để biết thêm chi tiết.Bây giờ, bạn có thể mở trình duyệt của mình để xem các thay đổi:
Mở /src/app/book/book.component.ts
và thay thế nội dung như hình dưới đây:
selectedBook
là BookDto
.editBook
phương pháp. Phương thức này tìm nạp sách với giá trị đã cho id
và đặt nó thành selectedBook
đối tượng.buildForm
phương thức để nó tạo biểu mẫu với selectedBook
dữ liệu.createBook
phương thức để nó đặt selectedBook
thành một đối tượng trống.save
phương pháp để xử lý cả hoạt động tạo và cập nhật.Mở /src/app/book/book.component.html
và thêm ngx-datatable-column
định nghĩa sau làm cột đầu tiên trong ngx-datatable
:
Đã thêm trình đơn thả xuống "Tác vụ" làm cột đầu tiên của bảng được hiển thị bên dưới:
Ngoài ra, hãy thay đổi ng-template #abpHeader
phần như được hiển thị bên dưới:
Mẫu này sẽ hiển thị Chỉnh sửa văn bản cho thao tác chỉnh sửa bản ghi, Sách mới cho thao tác bản ghi mới trong tiêu đề.
Mở /src/app/book/book.component.ts
và tiêm ConfirmationService
.
Thay thế hàm tạo như sau:
ConfirmationService
.ConfirmationService
vào hàm tạo.delete
phương thức.Xem tài liệu Cửa sổ bật lên xác nhận để biết thêm về dịch vụ này.
Mở /src/app/book/book.component.html
và sửa đổi ngbDropdownMenu
để thêm nút xóa như hình dưới đây:
Giao diện người dùng thả xuống hành động cuối cùng trông giống như bên dưới:
Nhấp vào hành động "Xóa" gọi delete
phương thức, sau đó sẽ hiển thị cửa sổ bật lên xác nhận như được hiển thị bên dưới:
ABP Framework cung cấp một hệ thống ủy quyền dựa trên cơ sở hạ tầng ủy quyền của ASP.NET Core . Một tính năng chính được thêm vào đầu cơ sở hạ tầng ủy quyền tiêu chuẩn là hệ thống quyền cho phép xác định quyền và bật / tắt cho mỗi vai trò, người dùng hoặc khách hàng.
Quyền phải có một tên duy nhất (a string
). Cách tốt nhất là định nghĩa nó là a const
, để chúng ta có thể sử dụng lại tên quyền.
Mở BookStorePermissions
lớp bên trong Acme.BookStore.Application.Contracts
dự án (trong Permissions
thư mục) và thay đổi nội dung như hình dưới đây:
Đây là một cách phân cấp để xác định tên quyền. Ví dụ: tên quyền "tạo sách" được định nghĩa là BookStore.Books.Create
. ABP không ép bạn vào một cấu trúc, nhưng chúng tôi thấy cách này hữu ích.
Bạn nên xác định các quyền trước khi sử dụng chúng.
Mở BookStorePermissionDefinitionProvider
lớp bên trong Acme.BookStore.Application.Contracts
dự án (trong Permissions
thư mục) và thay đổi nội dung như hình dưới đây:
Lớp này định nghĩa một nhóm quyền (để nhóm các quyền trên giao diện người dùng, sẽ được thấy bên dưới) và 4 quyền bên trong nhóm này. Ngoài ra, Tạo , Chỉnh sửa và Xóa là con của BookStorePermissions.Books.Default
quyền. Quyền con chỉ có thể được chọn nếu cha mẹ đã được chọn .
Cuối cùng, chỉnh sửa tệp bản địa hóa ( en.json
trong Localization/BookStore
thư mục của Acme.BookStore.Domain.Shared
dự án) để xác định các khóa bản địa hóa được sử dụng ở trên:
Tên khóa bản địa hóa là tùy ý và không có quy tắc bắt buộc. Nhưng chúng tôi thích quy ước được sử dụng ở trên.
Khi bạn xác định các quyền, bạn có thể thấy chúng trên phương thức quản lý quyền .
Vào Administration -> Identity -> Vai trò trang, chọn Permissions hành động cho vai trò quản trị để mở phương thức quản lý cho phép:
Cấp quyền bạn muốn và lưu phương thức.
Mẹo : Các quyền mới sẽ tự động được cấp cho vai trò quản trị viên nếu bạn chạy
Acme.BookStore.DbMigrator
ứng dụng.
Bây giờ, bạn có thể sử dụng quyền để ủy quyền quản lý sách.
Mở BookAppService
lớp và thêm đặt tên chính sách làm tên quyền được xác định ở trên:
Đã thêm mã vào hàm tạo. Base CrudAppService
tự động sử dụng các quyền này trên các hoạt động CRUD. Điều này làm cho dịch vụ ứng dụng an toàn, nhưng cũng làm cho API HTTP an toàn vì dịch vụ này được tự động sử dụng như một API HTTP như đã giải thích trước đây (xem bộ điều khiển API tự động ).
Bạn sẽ thấy ủy quyền khai báo, sử dụng
[Authorize(...)]
thuộc tính, sau đó trong khi phát triển chức năng quản lý tác giả.
Bước đầu tiên của giao diện người dùng là ngăn người dùng trái phép nhìn thấy mục menu "Sách" và truy cập vào trang quản lý sách.
Mở /src/app/book/book-routing.module.ts
và thay thế bằng nội dung sau:
AuthGuard
và PermissionGuard
từ @abp/ng.core
.canActivate: [AuthGuard, PermissionGuard]
định nghĩa tuyến đường.Mở /src/app/route.provider.ts
và thêm requiredPolicy: 'BookStore.Books'
vào /books
tuyến đường. Khối /books
định tuyến phải như sau:
Trang quản lý sách có nút Sách Mới sẽ ẩn nếu người dùng hiện tại không có quyền Tạo Sách .
Mở /src/app/book/book.component.html
tệp và thay thế nút tạo nội dung HTML như hình dưới đây:
*abpPermission="'BookStore.Books.Create'"
rằng ẩn nút nếu người dùng hiện tại không có quyền.Bảng sách trong trang quản lý sách có nút tác vụ cho mỗi hàng. Nút hành động bao gồm các hành động Chỉnh sửa và Xóa :
Chúng ta nên ẩn một hành động nếu người dùng hiện tại chưa cấp quyền liên quan.
Mở /src/app/book/book.component.html
tệp và thay thế nội dung các nút chỉnh sửa và xóa như hình dưới đây:
*abpPermission="'BookStore.Books.Edit'"
ẩn hành động chỉnh sửa nếu người dùng hiện tại không có quyền chỉnh sửa.*abpPermission="'BookStore.Books.Delete'"
ẩn hành động xóa nếu người dùng hiện tại không có quyền xóa.Nguồn: https://docs.abp.io/en/abp/latest
Trong hướng dẫn này, chúng ta sẽ đi sâu vào quá trình xây dựng chatbot bằng ChatGPT và C#. Chúng tôi sẽ đề cập đến mọi thứ, từ thiết lập quyền truy cập API ChatGPT đến triển khai chatbot của bạn. Bắt đầu nào!
Hiện nay nhiều người có xây dựng cơ sở dữ liệu trên server và kết nối tới để làm việc cho tiện. Nên mình chia sẻ bài viết này cho người mới nhé.
Trong IIS, bạn có thể tạo các trang web, ứng dụng và thư mục ảo để chia sẻ thông tin với người dùng qua Internet, mạng nội bộ hoặc mạng phụ. Mặc dù các khái niệm này đã tồn tại trong các phiên bản trước của IIS, một số thay đổi trong IIS 7 trở lên ảnh hưởng đến định nghĩa và chức năng của các khái niệm này. Quan trọng nhất, các trang web, ứng dụng và thư mục ảo giờ đây hoạt động cùng nhau theo mối quan hệ phân cấp như những khối xây dựng cơ bản để lưu trữ nội dung trực tuyến và cung cấp dịch vụ trực tuyến.
Design pattern là các giải pháp tổng thể đã được tối ưu hóa, được tái sử dụng cho các vấn đề phổ biến trong thiết kế phần mềm mà chúng ta thường gặp phải hàng ngày. Đây là tập các giải pháp đã được suy nghĩ, đã giải quyết trong tình huống cụ thể.
Thuật ngữ CDN có thể bạn sẽ bắt gặp khá nhiều bài viết trên thachpham.com, hoặc khi bạn cần một người có kinh nghiệm tư vấn giải pháp tiết kiệm băng thông máy chủ và tăng tốc độ website đều sẽ được nghe tư vấn là sử dụng CDN. Vậy CDN chính xác là cái gì, có bao nhiêu loại CDN, và website của bạn có thích hợp để sử dụng CDN không thì bài này sẽ cung cấp cho bạn các thông tin cần thiết đó.
Môi trường internet phát triển, kéo theo tội phạm mạng tăng cao, vì thế cần có những chuẩn bảo mật web cao hơn. Đó là lí do giao thức HTTPS dần thay thế hoàn toàn HTTP. Vậy, giao thức HTTPS là gì? HTTP và HTTPS khác nhau như thế nào? Và tại sao các website nên dùng HTTPS thay vì HTTP? Bài viết này sẽ giúp bạn giải đáp tất cả những thắc mắc đó.
Nếu bạn là một người có website bán hàng thì việc liên hệ thuận lợi nhanh cho khách hàng luôn là ưu tiên hàng đầu. Cũng chính vì lí dó này mình đã tìm hiểu sau khi chèn cho website của mình. Thấy hay nên chia sẻ cho mọi người có nhu cầu.