2016-08-11 22 views
10

Pobrałem nu-get pakować Hangfire.Dashboard.AuthorizationHangfire Dashboard Autoryzacja Config Nie działa

próbuję skonfigurować w oparciu o upoważnienie OWIN Zgodnie z docs następująco ale mam INTELLISENSE error DashboardOptions.AuthorizationFilters is obsolete please use Authorization property instead

ja również dostać intellisense błąd 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(); 
     } 
    } 
} 

* AKTUALIZACJA *

Ponieważ powyższa praca Nuget pakiet robi Mam próbowali stworzyć własną niestandardową filtr:

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; 
    } 
} 

Jak mogę ograniczyć się tylko do roli administratora tj jaka jest składnia?

+0

Która wersja HF używasz? Proszę również pokazać obszary nazw zaimportowane w klasie. – Yogi

+0

@Yogi Rdzenie Hangfire to 1.6.1, a Hangfire.Dashborad.Authorization to 2.1.0. Zaktualizowałem post, aby wyświetlać przestrzenie nazw. – adam78

Odpowiedz

1

Definiowanie opcji licznika w ten sposób pracował dla mnie -

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

mam importowane następujących nazw -

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

Tak to pokazano mi ostrzeżenie deprecated dla AuthorizationFilters i sugerują, aby użyć Authorization, w zasadzie interfejs IAuthorizationFilter zostanie usunięty w wersji 2.0 i musi być użyty interfejs IDashboardAuthorizationFilter.

W tym celu można utworzyć własny niestandardowy filtr implementujący IDashboardAuthorizationFilter i użyć go zamiast tego.

public class MyAuthorizationFilter : IDashboardAuthorizationFilter 
{ 
    public bool Authorize(DashboardContext context) 
    { 
     //Implement 
    } 
} 
+0

Ciągle pojawia się błąd "Typ lub przestrzeń nazw AuthorizationFilter nie istnieje w obszarze nazw Hangfire Deska rozdzielcza. Używałem tych samych przestrzeni nazw co ty? Wygląda na to, że ten pakiet jest nieaktualny. – adam78

+0

Zaimplementowałem własny filtr, ale w jaki sposób mogę ograniczyć się tylko do ról administratora - zobacz moją edycję powyżej? – adam78

13

Musisz się upewnić, że metoda Configure (app) jest wywołana w twojej klasie Startup.cs przed skonfigurowaniem panelu kontrolnego hangfire.

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); 
    } 
} 

Następnie w swojej klasie auth konfiguracyjnym można zrobić coś tak prostego jak to:

public class CustomAuthorizationFilter : IDashboardAuthorizationFilter 
{ 

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

     return false; 
    } 
} 
+0

Świetna odpowiedź! Dzięki! –

+0

Miło, że to dla mnie działało Głosuj! –