.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. 继承自 AuthorizeAttributeAuthorizeAttributeASP.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 接口,从而提高了系统的安全性。
相关推荐
AOwhisky1 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
czhc11400756632 小时前
722:零侵入;DBG;
c#
灯澜忆梦10 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-11 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-11 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白12 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
段一凡-华北理工大学14 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe14 小时前
C++——多态
开发语言·c++
心平气和量大福大15 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
白露与泡影15 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#