0

我的应用程序中有一条用于处理网站上的字符串资源的路径。控制器和操作由第 3 方库管理,因此我无法真正申请授权那里的属性。

我正在使用 WestWind 全球化库,它制作了一个类似https://localhost:44328/LocalizationAdmin/index.html.

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

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

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

1 回答 1

1

Web.config由 使用IIS。但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");
        }
    }
});
于 2018-12-03T01:42:23.893 回答