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

C# .NET .NET (C# a Visual Basic) ASP NET CORE - přístup k databázi v AuthorizeAttribute American English version English version

Aktivity (3)
Avatar
Adam Gajdečka:14. září 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. září 10:51
Avatar
Odpovídá na Adam Gajdečka
Adam Gajdečka:14. září 10:51

Používám ASP .NET 2.0

 
Nahoru Odpovědět 14. září 10:51
Avatar
Martin Petrovaj
Překladatel
Avatar
Martin Petrovaj:14. září 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. září 11:57
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Adam Gajdečka:14. září 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. září 12:12
Avatar
Odpovídá na Martin Petrovaj
Adam Gajdečka:14. září 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. září 22:13
Avatar
Odpovídá na Adam Gajdečka
Adam Gajdečka:14. září 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. září 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.