ABP学习 之 权限配置

完成API的添加后,如何对这些API进行授权处理呢?

权限配置

首先添加权限。
在xxxxx.Core Project的Authorization目录下,有个xxxxxAuthorizationProvider.cs类,在其SetPermissions方法内添加三个权限。

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);
// 添加三种权限
    var fileInfoPer = context.CreatePermission("FileInfo", L("FileInfo"));
    fileInfoPer.CreateChildPermission("FileInfo.Create", L("FileInfo.Create")); // FileInfo.Create 是FileInfo下的子权限
    fileInfoPer.CreateChildPermission("FileInfo.Delete", L("FileInfo.Delete")); // FileInfo.Delete 是FileInfo下的子权限
}

接着,为功能添加权限拦截

[AbpAuthorize("FileInfo")]
public string GetTestString()
{
    return "A";
}

[AbpAuthorize("FileInfo.Delete")]
public override Task Delete(EntityDto<long> input)
{
    return base.Delete(input);
}

[AbpAuthorize("FileInfo.Create")]
public override async Task<FileInfoDto> Create(FileInfoDto input)
{
    return await base.Create(input);
}

为样就完成了权限的配置了。

测试:

分别添加三个角色,
在这里插入图片描述
在这里插入图片描述
分别对应三个权限。
再添加三个用户,分别对应三个角色。
在这里插入图片描述
测试结果:

用户功能返回结果
Create_UserCreate200
Create_UserDelete403
Create_UserGetTestString403
Delete_UserCreate403
Delete_UserDelete200
Delete_UserGetTestString403
FileInfoUserCreate403
FileInfoUserDelete403
FileInfoUserGetTestString200

令我感到困惑的是子权限,我之前以为子权限Default会继承父权限的权限,那么CreateUser和DeleteUser对GetTestString应该都是200的。
又或者父权限是所有子权限的合集,FileInfoUser对Create和Delete是200的。
但测试结果显示,这三个权限是独立的,那么,CreateChildPermission有什么用?直接三个权限都是CreatePermission好了,有必要CreateChildPermission?
这个问题需留待以后找答案。

使用AbpAuthorize特性需要注意的地方

ABP对于授权使用了强大的动态方法拦截(interception)。因此,使用AbpAuthorize特性有一些限制:
不能用于私有方法。
不能用于静态方法。
不能用于非注入类的方法(我们必须要使用依赖注入)。

此外,
可以用于任何 public方法,如果该方法是通过接口调用的(比如应用服务通过接口使用)。
方法应该是virtual的,如果它是从类的引用直接调用的(比如ASP.Net MVC或者Web API的控制器)。
如果方法是protected的,那么它应该是 virtual的。

注意:AbpAuthorize特性有三个: 在应用服务中(应用层),我们使用Abp.Authorization.AbpAuthorize类。
在MVC控制器中(Web层),我们使用 Abp.Web.Mvc.Authorization.AbpMvcAuthorize类。
在ASP.NET Web API中,我们使用 Abp.WebApi.Authorization.AbpApiAuthorize特性。
这写特性的差异来自继承。在MVC端,派生自MVC自己的Authorize类。在Web API端,它派生自Web
API的Authorize类。因此,它已经很好地集成到了MVC和Web API。但是在应用层,它完全是ABP自己的实现而没有扩展任何类。

那么,在私有方法,静态方法,非注入类的方法如果进行权限拦截?
PermissionChecker.Authorize方法

public string GetTestString()
{
	PermissionChecker.Authorize("FileInfo");
    return "A";
}

public override Task Delete(EntityDto<long> input)
{
	PermissionChecker.Authorize("FileInfo.Delete");
    return base.Delete(input);
}

public override async Task<FileInfoDto> Create(FileInfoDto input)
{
	PermissionChecker.Authorize("FileInfo.Create");
    return await base.Create(input);
}

这样,效果是等同使用AbpAuthorize特性的。

下一节,什么是Features?和Permission有什么异同?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABP配置Swagger,可以按照以下步骤进行操作: 1. 在Startup的ConfigureServices方法中添加以下代码: ```csharp services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" }); }); ``` 这段代码会添加Swagger生成器,并指定API的标题和版本。 2. 如果你的项目中有XML注释文件,可以将其包含在Swagger文档中。在Startup的ConfigureServices方法中添加以下代码: ```csharp var xmlFile = @"XXX.Application.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); options.IncludeXmlComments(xmlPath, true); ``` 这段代码会将XML注释文件包含在Swagger文档中,以便生成API文档时能够显示注释内容。 3. 如果你想对Swagger文档进行更多的配置,可以在Startup的ConfigureServices方法中使用options对象进行配置。例如,你可以添加全局的请求过滤器、授权认证等。以下是一个示例: ```csharp services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" }); // 添加全局的请求过滤器 options.OperationFilter<FileUploadOperation>(); // 添加授权认证 options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "JWT Authorization header using the Bearer scheme", Type = SecuritySchemeType.Http, Scheme = "bearer" }); options.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new string[] {} } }); }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值