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数据库)里,不然验证是通过不了的,这个权限可以通过宿主服务的编译,发布,自动更新到IdentifyServer4数据库。
这样就实现了基本的权限校验。其余的细节就是在后台进行权限的角色相关的设置,这块我目前想到的可以用授权服务器提供的接口在后台进行设置,但是不知道abp vnext是否已经提供相关的方法。