2016-08-11 7 views
10

Я скачал ню получить пакет Hangfire.Dashboard.Authorizationзамедленное воспламенение Панель авторизации Config Не работает

Я пытаюсь настроить авторизацию на основе Owin согласно документации следующим образом, но я получаю ошибку INTELLISENSE DashboardOptions.AuthorizationFilters is obsolete please use Authorization property instead

Я также получить IntelliSense ошибка 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(); 
     } 
    } 
} 

* UPDATE *

Поскольку выше 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; 
    } 
} 

Как ограничить только админ ролей т.е. что синтаксис?

+0

Какую версию HF вы используете? Также покажите пространства имен, которые вы импортировали в классе. – Yogi

+0

@ Yogi Ядро Hangfire - 1.6.1, а Hangfire.Dashborad.Authorization - 2.1.0. Я обновил сообщение, чтобы показать пространства имен. – adam78

ответ

1

Определение параметров приборной панели таким образом работал для меня -

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; 

Да он показывает мне deprecated предупреждение для AuthorizationFilters и предлагают использовать Authorization, в основном интерфейс IAuthorizationFilter будет удален в версии 2.0, а интерфейс IDashboardAuthorizationFilter должен использоваться.

Для этого вы можете создать свой собственный фильтр, реализующий IDashboardAuthorizationFilter, и использовать его вместо этого.

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

Я все еще получаю ошибку 'Тип или пространство имен AuthorizationFilter не существует в пространстве имен Hangfire.Dashboard'. Я использовал те же пространства имен, что и вы? Похоже, что этот пакет устарел. – adam78

+0

Я реализовал свой собственный фильтр, но как ограничить только роли администратора - см. Мое редактирование выше? – adam78

13

Вы должны убедиться, что метод Configure (приложение) вызываются в классе Startup.cs Перед настройку замедленного воспламенения панели.

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

Затем в Идент классе конфигурации вы можете сделать что-то же просто, как это:

public class CustomAuthorizationFilter : IDashboardAuthorizationFilter 
{ 

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

     return false; 
    } 
} 
+0

Отличный ответ! Благодаря! –

+0

Приятно, что это сработало для меня! –