Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Adam Gajdečka:14.9.2018 10:51

Nejde mi DI ve vlastním AuthorizeAttribute

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
  public class InvoiceAuthorize : AuthorizeAttribute, IAuthorizationFilter
  {
     private  ApplicationDbContext _dbContext { get; set; }

     public InvoiceAuthorize(ApplicationDbContext dbContext)
      {
          _dbContext = dbContext;
      }

      public void OnAuthorization(AuthorizationFilterContext context)
      {

              var invoiceId = Int32.Parse(context.RouteData.Values["id"].ToString());

              if (_dbContext.Invoices.First().Number == 1) //its for test
              {
                  return;
              }
              context.Result = new StatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);


      }
  }

Zkusil jsem: zkoušel jsem registrovat AuthorizeAttribute v Startup.cs

Chci docílit: Chci si vytvořit AuthorizeAttribute, který získá Id Faktury z Action a ověří, zda mu daná faktura patří.

 
Odpovědět
14.9.2018 10:51
Avatar
Odpovídá na Adam Gajdečka
Adam Gajdečka:14.9.2018 10:51

Používám ASP .NET 2.0

 
Nahoru Odpovědět
14.9.2018 10:51
Avatar
Martin Petrovaj
Tvůrce
Avatar
Martin Petrovaj:14.9.2018 11:57

Nie som si na 100% istý, ale nevieš sa k ApplicationDbCon­text dostať v OnAuthorization cez:

context.HttpContext.RequestServices.GetService(typeof(ApplicationDbContext));

?

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
14.9.2018 11:57
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Adam Gajdečka:14.9.2018 12:12

Díky moc. Téměř správně, VS mi nabídlo tuto úpravu a funguje.

Řešení:

_dbContext = (FakturyApp.Data.ApplicationDbContext)context.HttpContext.RequestServices.GetService(typeof(ApplicationDbContext));
 
Nahoru Odpovědět
14.9.2018 12:12
Avatar
Odpovídá na Martin Petrovaj
Adam Gajdečka:14.9.2018 22:13

ještě bych se chtěl zeptat, jak získám UserId přihlášeného uživatele. Zkusil jsem to přes _userManager stejně jako s tím dbContext, ale to nejde. Opět myslím v tom AuthorizeAttribute

Děkuji

 
Nahoru Odpovědět
14.9.2018 22:13
Avatar
Odpovídá na Adam Gajdečka
Adam Gajdečka:14.9.2018 22:44

tak si odpovím sám, nakonec jsem to zjistil

var userId = context.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
 
Nahoru Odpovědět
14.9.2018 22:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.