abp vnext 开发快速入门 3 实现权限控制

时间:2023-03-09 20:19:35
abp vnext 开发快速入门 3 实现权限控制

上篇讲了abp vnext 实现了简单的增加操作的例子。删除更新查询基本类似,这里就不讲了,接下来说下如何实现角色权限控制。

再说之前,先说下如果想更加透彻的理解abp vnext的权限控制,最好是先要了解IdentityServer4 和 asp.net core 基于策略的授权。如果你说我不想要去了解那么多。我就想快点能实现功能,那么就往下看吧。

我这里主要说的是权限相关的控制,其实abp实现权限控制就是把设置好的一个个权限当成了一个个的策略,这里讲如何去实现。

首先,先去设置需要加的权限,拿上篇的创建类别这个操作来说。先到Application.Contracts层找到PermissionDefinitionProvider 这个类,在里边加入以下代码:

 var categoryManagement = myGroup.AddPermission("Category_Management");
categoryManagement.AddChild("Category_Management_Create");

  

然后在Application层下的CategoryAppService里找到之前创建的CreateAsync 方法,加上这个属性

[Authorize("Category_Management_Create")],如下

        /// <summary>
/// 创建类别
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[Authorize("Category_Management_Create")]
public async Task<ApiResponse> CreateAsync(CreateCategoryDto input)
{
var category = ObjectMapper.Map<CreateCategoryDto, Category>(input); var categoryAdd = await _categoryRepository.InsertAsync(category); return new ApiResponse("创建成功", ObjectMapper.Map<Category, CategoryDto>(categoryAdd),SoftwarePortalErrorCodes.Success);
}

  

这样其实就基本快要完成了,因为在宿主服务里配置了授权认证服务器如下:

"AuthServer": {
"Authority": "https://localhost:123456/",
"ClientId": "Test_Web",
"ClientSecret": "12121212*"
}

  

这样之前通过登录获取到的JWTToken过来后会自动用授权认证服务器接口进行验证,验证通过则通过。不过在这之前,还少一个东西。就是刚刚设置的权限(Category_Management_Create),要加到授权认证服务器的数据库(IdentifyServer4数据库)里,不然验证是通过不了的。

这样就实现了基本的权限校验。其余的细节就是在后台进行权限的角色相关的设置,这块我目前想到的可以用授权服务器提供的接口在后台进行设置,但是不知道abp vnext是否已经提供相关的方法。