從零開始Blazor Server(8)–增加菜單以及調整位置
- 2022 年 8 月 5 日
- 筆記
這篇幹啥
這篇文章主要是把前面的一些東西稍微調整一下,使其更適合後面的內容。
主要是兩個事,一個是把原來的PermissionEntity
直接變成MenuEntity
,直接讓最後一級是菜單,這樣後面就簡單很多。
另外增加一些默認的菜單為後面的文章做準備。
另外就是調整一下Pages
裡面的目錄結構,讓我們不用每個頁面都去加@attribute [Authorize]
處理目錄結構
之前的內容里,我們最後還是用了Furion自帶的方法來處理成策略授權了,所以我們正常的話需要每個頁面都加上@attribute [Authorize]
。
但是這樣太麻煩了,幸好微軟給我們提供了一個_Imports.razor
的東西,這個文件是目錄級的,我們可以在某層目錄下添加,然後此目錄和它的子目錄都會受影響。
所以我們就需要把Login
和其他的頁面分開,因為我們的Login
頁面是不需要登錄的,而且分開以後更清晰。
這裡在Pages
下面新建兩個目錄,一個叫Account
,一個叫Admin
。這裡把Login.razor
放到Account
目錄下,把其他的razor
文件都放到Admin
下面。
這裡注意不要移動那兩個
cshtml
文件,因為那兩個文件的位置如果改變還需要改變很多其他的東西。
然後在Admin
目錄下新建一個_Imports.razor
,內容為:
@attribute [Authorize]
這樣,所有的Admin
目錄下的頁面都會受到影響,需要許可權驗證。
修改MenuEntity
在之前,我們是做了個PermissionEntity
,裡面只記錄了許可權資訊,但是這樣就還需要一套菜單系統,然後還要根據Url來進行匹配,就太麻煩了一點,所以這裡我們直接把菜單系統和許可權系統合起來,把PermissionEntity
改為MenuEntity
,並且增加Icon
、ParentId
用於菜單使用。
修改後的MenuEntity
如下:
[Description("菜單表")]
public class MenuEntity: BaseEntity<MenuEntity, int>
{
[Description("菜單名")]
public string? Name { get; set; }
[Description("菜單圖標")]
public string? Icon { get; set; }
[Description("對應頁面Url")]
public string? Url { get; set; }
[Description("父菜單ID")]
public int ParentId { get; set; }
[Navigate(nameof(ParentId))]
public MenuEntity? Parent { get; set; }
[Navigate(nameof(ParentId))]
public List<MenuEntity>? Children { get; set; }
[Description("角色")]
[Navigate(ManyToMany = typeof(RoleMenuEntity))]
public virtual ICollection<RoleEntity>? Roles { get; set; }
}
同時我們增加一部分菜單項到DbExtension
,這塊程式碼就不貼了,直接去github看把。
源碼在github://github.com/j4587698/BlazorLearn,分支lesson8。