web-dev-qa-db-ja.com

Hangfire Dashboard Authorization Configが機能しない

Nu-getパッケージをダウンロードしましたHangfire.Dashboard.Authorization

次のようにドキュメントに従ってOWINベースの承認を構成しようとしていますが、インテリセンスエラーDashboardOptions.AuthorizationFilters is obsolete please use Authorization property instead

インテリセンスエラーも発生しますThe type or namespace AuthorizationFilter and ClaimsBasedAuthorizationFilterd not be found

using Hangfire.Dashboard;
using Hangfire.SqlServer;
using Owin;
using System;

namespace MyApp
{
    public class Hangfire
    {
       public static void ConfigureHangfire(IAppBuilder app)
        {
           GlobalConfiguration.Configuration
           .UseSqlServerStorage(
               "ApplicationDbContext",
                new SqlServerStorageOptions 
                  { QueuePollInterval = TimeSpan.FromSeconds(1) });

           var options = new DashboardOptions
           {
               AuthorizationFilters = new[]
               {
                  new AuthorizationFilter { Users = "admin, superuser", Roles = "advanced" },
                  new ClaimsBasedAuthorizationFilter("name", "value")
               }
           };

           app.UseHangfireDashboard("/hangfire", options);
           app.UseHangfireServer();
        }
    }
}

*更新*

上記のnugetパッケージは機能しないため、私は独自のカスタムフィルターを作成しようとしました。

public class HangfireAuthorizationFilter : IAuthorizationFilter
{
    public bool Authorize(IDictionary<string, object> owinEnvironment)
    {
        // In case you need an OWIN context, use the next line,
        // `OwinContext` class is the part of the `Microsoft.Owin` package.
        var context = new OwinContext(owinEnvironment);

        // Allow all authenticated users to see the Dashboard (potentially dangerous).
        return context.Authentication.User.Identity.IsAuthenticated;
    }
}

管理者の役割のみに制限するにはどうすればよいですか。つまり、構文は何ですか。

12
adam78

Hangfireダッシュボードを構成する前に、Startup.csクラスでConfigure(app)メソッドが呼び出されていることを確認する必要があります。

  public partial class Startup
{
    private static readonly ILog log = 
        LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod
    ().DeclaringType);


    public void Configuration(IAppBuilder app)
    {

        //Hangfire Config
        GlobalConfiguration.Configuration.UseSqlServerStorage
            ("HangFireJobs");
        app.UseHangfireServer();

        log.Debug("Application Started");

        ConfigureAuth(app);


        //this call placement is important
        var options = new DashboardOptions
        {
            Authorization = new[] { new CustomAuthorizationFilter() }
        };
        app.UseHangfireDashboard("/hangfire", options);
    }
}

次に、auth構成クラスで、次のような簡単なことを実行できます。

  public class CustomAuthorizationFilter : IDashboardAuthorizationFilter
{ 

    public bool Authorize(DashboardContext context)
    {
        if (HttpContext.Current.User.IsInRole("Admin"))
        {
            return true; 
        }

        return false; 
    }
}
16
Frank

この方法でダッシュボードオプションを定義すると、うまくいきました-

    var options = new DashboardOptions
    {
        AuthorizationFilters = new List<IAuthorizationFilter>
       {
          new Hangfire.Dashboard.AuthorizationFilter { Users = "admin, superuser", Roles = "advanced" },
          new Hangfire.Dashboard.ClaimsBasedAuthorizationFilter("name", "value")
       }
    };

次の名前空間をインポートしました-

using System;
using Owin;
using Hangfire;
using Hangfire.Dashboard;
using System.Collections.Generic;
using Hangfire.SqlServer;

はい、それは私にdeprecatedAuthorizationFilters警告を示しており、Authorizationの使用を提案しています。基本的に、IAuthorizationFilterインターフェースはバージョン2.0で削除され、IDashboardAuthorizationFilterインターフェースを使用する必要があります。

このために、IDashboardAuthorizationFilterを実装する独自のカスタムフィルターを作成し、代わりにこれを使用できます。

public class MyAuthorizationFilter : IDashboardAuthorizationFilter
{
    public bool Authorize(DashboardContext context)
    {
        //Implement
    }
}
1
Yogi