ASP.NET Core 2.1 MVC,我们可以在appsetting.json中设置对控制器的限制吗?西风全球化网址

时间:2018-12-02 19:34:09

标签: asp.net-core-mvc authorization asp.net-identity westwind-globalization

我的应用程序中有一个用于处理站点上字符串资源的路径。控制器和动作由第3方库管理,因此我不能真正在此处申请授权属性。

我正在使用WestWind全球化库,该库生成类似https://localhost:44328/LocalizationAdmin/index.html的URL。

我可以像在旧的ASP.NET MVC中的web.config中那样在appsetting.json中重新绑定任何控制器吗?

类似于ASP.NET Core中的以下内容?

<location path="LocalizationAdmin">
  <system.web>
    <authorization>
      <deny users="*">
    </authorization>
  </system.web>
</location>

1 个答案:

答案 0 :(得分:1)

Web.configIIS使用。但是ASP.NET Core可以不使用IIS进行部署。与Nginx合作时,无法在appsettings.json中配置授权。

一种更简单的方法是设置一个简单的中间件:

app.Use(async(ctx , next)=>{
    // passby all other requests
    if(!ctx.Request.Path.StartsWithSegments("/LocalizationAdmin")){
        await next();      
    }
    else {
        var user = ctx.User;               // now we have the current user
        var resource = new { /* ... */ };  // construct description as you like
        var authZService = ctx.RequestServices.GetRequiredService<IAuthorizationService>();
        var accessible =await  authZService.AuthorizeAsync(user, resource,"MyPolicyName");
        if(accessible.Succeeded){
            await next();          
        }else{
            ctx.Response.StatusCode = 403;
            await ctx.Response.WriteAsync("not allowed");
        }
    }
});