.Net Web API 访问权限限定

看到一个代码是这样的:

c# webapi 上

Route("api/admin/file-service"), AuthorizeAdmin

AuthorizeAdmin 的定义是这样的

复制代码
public class AuthorizeAdminAttribute : AuthorizeAttribute
{
    public AuthorizeAdminAttribute()
    {
        Roles = "admin";
    }
}

这个AuthorizeAdmin 有什么用?

AuthorizeAdminAttribute 是一个自定义的授权属性,继承自 AuthorizeAttribute,其目的是对控制器或动作方法进行访问控制,确保只有角色为 "admin" 的用户能够访问该方法或控制器。

解析 AuthorizeAdminAttribute 的工作原理

  1. 继承自 AuthorizeAttribute : AuthorizeAttribute 是 ASP.NET Core 中的一个内置特性,它用于指定访问某个控制器或方法的权限要求。当你使用 Authorize 特性时,系统会检查当前请求的用户是否已经通过身份验证,并且是否符合指定的授权要求(例如角色、权限等)。

  2. Roles = "admin" : 在 AuthorizeAdminAttribute 构造函数中,设置了 Roles = "admin"。这意味着,只有角色为 "admin" 的用户才能访问使用该特性标记的控制器或方法。换句话说,只有角色为 "admin" 的用户,系统才会允许其访问这部分代码。如果用户的角色不是 "admin",他们将无法访问这个 API,通常会返回 HTTP 403 (Forbidden) 错误。

  3. 自定义授权特性 : AuthorizeAdminAttribute 是一个自定义特性,实际上它是通过继承 AuthorizeAttribute 来实现的。在使用时,它可以像其他特性一样直接应用到控制器或方法上。

示例

假设有一个 API 控制器,只有管理员可以访问某些操作:

复制代码
[Route("api/admin/file-service")]
[AuthorizeAdmin]  // 只有角色为 admin 的用户可以访问
public class FileServiceController : ControllerBase
{
    [HttpGet]
    public IActionResult GetFiles()
    {
        // 逻辑:返回文件列表
        return Ok(new { files = "file1.txt", "file2.txt" });
    }
    
    [HttpPost]
    public IActionResult UploadFile(IFormFile file)
    {
        // 逻辑:上传文件
        return Ok(new { message = "File uploaded successfully!" });
    }
}

细节

  • 身份验证 :为了使用 AuthorizeAdminAttribute,用户必须先通过身份验证(比如使用 JWT Token 或 Cookie 认证)。如果用户未认证,系统会拒绝访问,返回一个 401(Unauthorized)状态码。
  • 角色验证 :在认证通过的基础上,AuthorizeAdminAttribute 还会验证用户的角色,确保用户具有 "admin" 角色。角色通常是通过认证时返回的 JWT token 或服务器的身份验证系统来附带的。

总结

AuthorizeAdminAttribute 的作用是:

  • 限制访问该控制器或方法的用户必须具备 admin 角色。
  • 它是基于 ASP.NET Core 的 AuthorizeAttribute 特性自定义的。
  • 它确保了只有管理员角色的用户才能访问标记为 [AuthorizeAdmin] 的 API 接口,从而提高了系统的安全性。
相关推荐
谢亮_vipxieliang20 分钟前
JavaScript this 指向完全指南:调用位置决定一切
开发语言·javascript·ecmascript
denlaku26 分钟前
JDK 13 新特性详解
java·开发语言
念越38 分钟前
题库、练习与错题本代码阅读
开发语言·数据结构
l1t40 分钟前
几种数据库软件count(distinct)和count()from group by子查询性能测试
开发语言·数据库
熊猫钓鱼>_>1 小时前
大学图论第 6 讲:网络流与二分图匹配——对偶性让瓶颈自己现形
开发语言·算法·面试·职场和发展·图论·校招·面经
方便面不加香菜1 小时前
C++ 关于多态的知识点讲解
开发语言·c++
jimy11 小时前
C++ 类成员函数的内联定义(inline)详解
开发语言·c++
Nebula_g1 小时前
JavaSE高级:动态代理
java·开发语言·算法·javase
Behavior1 小时前
Unity 7.0 Alpha 拆解:编辑器干掉 Mono 换 CoreCLR
c#·unity3d·游戏开发
青春逝如流水2 小时前
Java 线程与操作系统、硬件的关系:状态、映射与差异
java·开发语言·多线程·ai文章