Aracılığıyla paylaş


PrincipalPermissionAttribute, hata olarak kullanımdan kaldırıldı

PrincipalPermissionAttribute Oluşturucu kullanımdan kaldırıldı ve derleme zamanı hatası üretir. Bu özniteliğin örneğini oluşturamaz veya bir yönteme uygulayamazsınız.

Açıklama değiştirildi

.NET Framework ve .NET Core'da, özniteliğiyle yöntemlere PrincipalPermissionAttribute açıklama ekleyebilirsiniz. Örneğin:

[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
public void MyMethod()
{
    // Code that should only run when the current user is an administrator.
}

.NET 5'den başlayarak, özniteliğini bir yönteme uygulayamazsınız PrincipalPermissionAttribute . özniteliğinin oluşturucusunun kullanımdan kaldırılmış olması ve derleme zamanı hatası oluşturması. Diğer eski uyarılardan farklı olarak, hatayı gizleyemezsiniz.

Değişiklik nedeni

Türü PrincipalPermissionAttribute , alt sınıfı SecurityAttributeolan diğer türler gibi öğesinin bir parçasıdır. NET'in Kod Erişim Güvenliği (CAS) altyapısı. .NET Framework 2.x - 4.x'te, uygulama tam güven senaryosu altında çalışıyor olsa bile çalışma zamanı yöntem girdisinde ek açıklamaları zorunlu kılar PrincipalPermissionAttribute . .NET Core ve .NET 5 ve üzeri CAS özniteliklerini desteklemez ve çalışma zamanı bunları yoksayar.

.NET Framework'ten .NET Core'a ve .NET 5'e kadar olan bu davranış farkı, erişimin engellenmesi ancak bunun yerine izin verilmesi gereken bir "açma başarısızlığı" senaryosuna neden olabilir. "Başarısız açma" senaryolarını önlemek için artık .NET 5 veya üzerini hedefleyen koda özniteliğini uygulayamazsınız.

Sürüm kullanıma sunulmuştur

5.0

Kullanımdan kaldırılma hatasıyla karşılaşırsanız, işlem yapmanız gerekir.

  • özniteliğini bir ASP.NET MVC eylem yöntemine uyguluyorsanız:

    ASP kullanmayı göz önünde bulundurun. NET'in yerleşik yetkilendirme altyapısı. Aşağıdaki kod, bir özniteliği olan AuthorizeAttribute bir denetleyiciye nasıl ek açıklama ekinin ek açıklama eklilğini gösterir. ASP.NET çalışma zamanı, eylemi gerçekleştirmeden önce kullanıcıyı yetkiler.

    using Microsoft.AspNetCore.Authorization;
    
    namespace MySampleApp
    {
        [Authorize(Roles = "Administrator")]
        public class AdministrationController : Controller
        {
            public ActionResult MyAction()
            {
                // This code won't run unless the current user
                // is in the 'Administrator' role.
            }
        }
    }
    

    Daha fazla bilgi için bkz. ASP.NET Core'da rol tabanlı yetkilendirme ve ASP.NET Core'da yetkilendirmeye giriş.

  • Özniteliğini bir web uygulamasının bağlamı dışında bir kitaplık koduna uyguluyorsanız:

    Yönteminizin başında denetimleri el ile gerçekleştirin. Bu, yöntemi kullanılarak IPrincipal.IsInRole(String) yapılabilir.

    using System.Threading;
    
    void DoSomething()
    {
        if (Thread.CurrentPrincipal == null
            || !Thread.CurrentPrincipal.IsInRole("Administrators"))
        {
            throw new Exception("User is anonymous or isn't an admin.");
        }
    
        // Code that should run only when user is an administrator.
    }
    

Etkilenen API’ler