.NET Core 1.1'de bir API oluşturuyorum. HttpContext.User
numaralı özel bir User
nesnesini, diğer tüm denetleyicilerin devraldığı bir temel denetleyicide yapıyorum ve kimlik doğrulaması varsayılan olarak etkinleştirilmiş (gerekiyorsa, [AllowAnonymous]
ile manüel olarak devre dışı bırakılmalıdır). User
nesnesinin bir IsAdmin
özelliği vardır. Şu anda, kullanıcının aşağıdaki gibi her ilgili işlevin en üstünde bir yönetici olup olmadığını kontrol ediyorum, ancak bu kodu basitleştirmek ve temizlemek için özel bir özellik eklemenin bir yolu olması gerektiğini düşünüyorum..NET Çekirdekinde özel yetkilendirme özniteliği
bool.Parse(HttpContext.User.FindFirst("IsAdmin")?.Value)
Bunun yerine:
[HttpGet]
public async Task<IActionResult> Get()
{
if (!User.IsAdmin)
return Forbid();
// logic
}
bu (veya benzer bir şey) istiyorum:
[AdminOnly]
[HttpGet]
public async Task<IActionResult> Get()
{
// logic
}
ben Başvuru için
, User.IsAdmin
bu için kısaltmadır denemek için source for [AuthorizeAttribute]
bakarak çalıştı, ama sadece bir kabuk ve ben kn gerçek büyünün gerçekleştiği yer.
Bunu nasıl yapabilirim?
, temelde bir kullanma Adlandırılmış bir ilkeyle öznitelik oluşturduğunuzda, ilke olarak bir rol veya hak talebi veya başka bir kural gerektirecek ilkeyi tanımlarsınız. https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies –
Blowdart'ın (ASP.NET Çekirdek güvenliğinden sorumlu) yanıtını kontrol edin, kendi özniteliklerinizi yaratmamalısınız (veya ihtiyacınız var) – Tseng
@JoeAudette Neye ihtiyacım olduğu konusunda emin değilim. :/[Hak talebinde bulunan yetkilendirme] (https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims#adding-claims-checks) işe yarayacaktır, iddia doğrudur. Bunu bir cevap olarak eklerseniz kabul edeceğim. – vaindil