Vajíčková mánie Vajíčková mánie
Probíhá výprodej HTML, JavaScript a Bootstrap. Slevy až 80 %
Vyšlehej si extra vědomosti! Až 100% bodů na prémiový obsah zdarma! Více zde

Diskuze: ASP NET CORE - přístup k databázi v AuthorizeAttribute

Aktivity (4)
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
Překladatel
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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 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.