qq_17031883 2024-07-21 16:08 采纳率: 28.3%
浏览 37
已结题

asp.core 权限控制怎么做,需要控制到每个方法

asp.core 权限控制怎么做,需要控制到每个动作方法,希望能提供个合理的建议,图三是权限控制表

img

img

img

  • 写回答

33条回答 默认 最新

  • 阿里嘎多学长 2024-07-21 16:08
    关注
    获得0.15元问题酬金

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    在 ASP.NET Core 中实现细粒度的权限控制,通常涉及到以下几个步骤:

    1. 角色和策略的设置

    首先,你需要定义角色和策略。角色可以是简单的如 Admin, User 等,而策略可以更具体,例如 EditInvoice, ViewInvoice 等。

    2. 权限控制表的设计

    根据你提供的图片,看起来你已经有了一个权限控制表。通常,这样的表会包含以下字段:

    • id:唯一标识符
    • store_id:可能表示店铺或组织标识符
    • auth_id:表示权限或角色的标识符
    • fun_id:表示功能或动作的标识符
    • business:可能表示业务逻辑或模块

    3. 权限控制的实现

    在 ASP.NET Core 中,你可以使用属性来实现权限控制。例如,使用 [Authorize] 属性来控制访问权限。

    a. 定义策略

    你可以在 Startup.csConfigureServices 方法中定义策略:

    services.AddAuthorization(options =>
    {
        options.AddPolicy("EditInvoice", policy => policy.RequireRole("Admin"));
        options.AddPolicy("ViewInvoice", policy => policy.RequireClaim("Permission", "Invoice.View"));
    });
    

    b. 应用策略

    然后,你可以在控制器或动作方法上应用这些策略:

    [Authorize(Policy = "EditInvoice")]
    public IActionResult Edit(int id)
    {
        // 编辑发票的代码
    }
    
    [Authorize(Policy = "ViewInvoice")]
    public IActionResult View(int id)
    {
        // 查看发票的代码
    }
    

    4. 权限控制表与 ASP.NET Core 集成

    你需要将权限控制表中的数据与 ASP.NET Core 的身份验证和授权系统集成。这通常涉及到以下几个步骤:

    a. 数据模型

    创建一个数据模型来表示权限控制表中的记录。

    public class AuthItem
    {
        public int Id { get; set; }
        public int StoreId { get; set; }
        public int AuthId { get; set; }
        public int FunId { get; set; }
        public int Business { get; set; }
    }
    

    b. 数据访问层

    实现数据访问层来查询权限控制表。

    c. 授权中间件或服务

    创建一个授权中间件或服务来检查用户是否有权限执行特定的动作。

    public class PermissionAuthorizationHandler : AuthorizationHandler<PermissionRequirement>
    {
        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement)
        {
            var user = context.User;
            if (user.Identity.IsAuthenticated)
            {
                // 检查用户是否有权限
                var hasPermission = CheckPermission(user, requirement.Permission);
                if (hasPermission)
                {
                    context.Succeed(requirement);
                }
            }
            return Task.CompletedTask;
        }
    
        private bool CheckPermission(ClaimsPrincipal user, string permission)
        {
            // 实现检查逻辑
        }
    }
    

    d. 定义要求和处理程序

    定义一个要求类和处理程序来处理权限检查。

    public class PermissionRequirement : IAuthorizationRequirement
    {
        public string Permission { get; }
        public PermissionRequirement(string permission)
        {
            Permission = permission;
        }
    }
    
    public class PermissionAuthorizationHandler : AuthorizationHandler<PermissionRequirement>
    {
        // 实现处理逻辑
    }
    

    5. 中间件配置

    Startup.csConfigure 方法中配置中间件。

    app.UseAuthorization();
    

    6. 测试和调试

    最后,确保测试你的权限控制系统以验证它按预期工作。

    请注意,这里的代码只是一个示例,你需要根据你的具体需求和项目结构进行调整。如果你需要更具体的帮助,可以提供更多的项目细节或代码示例。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月29日
  • 创建了问题 7月21日

悬赏问题

  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题
  • ¥15 有没有人能解决下这个问题吗,本人不会编程