代码之家  ›  专栏  ›  技术社区  ›  Sujit.Warrier

角色asp的动态授权。净核心

  •  13
  • Sujit.Warrier  · 技术社区  · 7 年前

    假设有一个控制器

    [Authorize(Roles=//set dynamically)]
    public IActionResult DashBoard(LoginModel model)
    {
    }
    

    我尝试了以下问题的解决方案

    1. Add roles to authorize attribute

    2. dynamically assign controller action permissions to roles

    3. dynamically add roles to authorize attribute for controller (错误:Handle方法-找不到合适的方法进行重写)

    4. can policy based authorization be more dynamic

    3 回复  |  直到 4 年前
        1
  •  17
  •   Tseng    7 年前

    [Authorize(Roles=//set dynamically)] 必须了解 编译时间 .出于这个原因使用角色也是 正如blowdart在评论中的链接帖子所指出的那样。

    相反,您应该使用索赔和保单。声明是细粒度权限,例如“CreateCustomer”或“DeleteCustomer”或“ViewDashboard”。

    [Authorize(Policy = "ViewDashboard")]
    

    public class ViewDashboardRequirement : AuthorizationHandler<ViewDashboardRequirement>, IAuthorizationRequirement
    {
        public override void Handle(AuthorizationContext context, ViewDashboardRequirement requirement)
        {
            if (context.User.HasClaim(c => c.Type == "dashboard:read"))
            {
                context.context.Succeed(requirement);
                return;
            }
    
            // only call fail if you do not want that other AuthorizationHandler may succeed with 
            // a different requirement
            // context.Fail();
        }
    }
    

    here .

    • 支持
    • 经理

    根据评论更新。

    你应该能够利用ASP。NET Core Identity的声明和roleclaim功能,不需要更改一行代码,因此您可以 IdentityRole IdentityRoleClaim 识别符 (即“经理”),然后添加多个 身份识别

        2
  •  0
  •   Mehdi Nabizadeh    4 年前

    我认为如果角色用于授权,则必须使用策略。 事实上,基于策略和基于角色的优势之一就是这一点。

        3
  •  -5
  •   Pavel Anikhouski    5 年前
    public IActionResult Validate(LoginDetails userobj)
           {
              LoginDetails user = new LoginDetails();
             var checklogin = from s in appDbContext.loginDetails where s.UserName == userobj.UserName && s.Password == userobj.Password select s;
    
                   if (checklogin != null && checklogin.Count() > 0)
                   {
                       if (checklogin.FirstOrDefault().Role == 1)
                       {
                           return RedirectToAction("Home");
                       }
                       else if (checklogin.FirstOrDefault().Role == 2)
                       {
                           var UserId = checklogin.FirstOrDefault().LoginId;
                           HttpContext.Session.SetInt32("UserId", UserId);
                           return RedirectToAction("Index1");
                       } 
               }
    
               return RedirectToAction("Failed");
           }