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

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 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见