2011-07-28 16 views
52

ASP.NET MVC kullanma Bazı özel yetkilendirme mantığına dikkat çekmek için özel bir Yetkilendirme özniteliği oluşturuyorum. Çok sayıda örneğe baktım ve bu oldukça basit bir şekilde ileri sürülüyor ama sorum, hangi yöntemin geçersiz kılınması gerektiğidir, AuthorizeCore veya OnAuthorization? Birini diğerini geçersiz kılan birçok örnek gördüm. Bir fark var mı?AuthorizeAttribute geçersiz kılma AuthorizeCore veya OnAuthorization

+1

Ödeme MVC4, http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/e0115a823029#src%2fSystem.Web.Mvc%2fAuthorizeAttribute.cs – user1736525

cevap

71

ipucu dönüş türlerinde geçerli:

AuthorizeCore bir boolean döndüren - bu karar kod yapıyor. Bu Temelde soruya cevap gerektiğini onlar vb vb vardır roller kullanıcının kimliğini ve test bakarak sınırlı olmalıdır:

Do I want this user to proceed?

O "tarafında" herhangi bir ek faaliyetleri gerçekleştirmek gerekir.

OnAuthorize void değerini döndürür - bu noktada gerçekleşmesi gereken herhangi bir işlevselliği koyarsınız. Örneğin. Bir kütüğe yazın, oturum vb. Bazı verileri depolayın.

+1

kaynak kodu –

+14

Maalesef AuthorizeCore değil bilgiler için teşekkür ederiz İhtiyacım olan AuthorizationContext'i (RouteData'ya erişmek ve buna dayalı kararlar vermek için) içerdiğinden, gördüğüm tek yaklaşım OnAuthorize kullanıyor. – gw0

+4

Neden "AuthorizationContext", "AuthorizeCore" alanına geçti? Bu büyük bir kusur gibi görünüyor. – Jez

15

Kullanıcının ilk kez yetkilendirilmiş olup olmadığına veya AuthorizeCore numaralı telefondan önbelleğe alınmış bir yetkilendirmeye sahip olup olmadığına bakılmaksızın çalışması gereken herhangi bir kodu girmelisiniz.

Kaynak koduna bakarsanız, AuthorizeCore öğesinin hem OnAuthorize hem de OnCacheAuthorization tarafından çağrıldığını görebilirsiniz. Bu, yetkilendirmenin önbelleğe alınmasına izin verir ancak yine de belirli eylemlere izin verir ve yetkilendirme ile ilgili gerçek kararları verir.

AuthorizationContext'ten bir şeye ihtiyacınız varsa, bilgiyi saklamak için bir özellik oluşturabilir ve ardından AuthorizeCore yöntemine erişebilirsiniz.

+0

Cevabınızın son tümcesini vurgulamak isterdim . Onu gerçekten cesaretlendirmelisin. Kabul edilen cevapta @ gw0'un yorumuna atıfta bulunarak, gerçekten talihsiz olan şey, yanlış nedenden ötürü yanlış yere kullanma önerisinin reddedilmesidir. –

+3

AuthorizeAttribute (MSDN) belgelerinin açıkça (iş parçacığı güvenliği) _ "İş parçacığı üyeleri iş parçacığı güvenli olduğu garanti edilmez." _ Bu nedenle, bir mülkte bilgi tutmanın bir seçenek olmadığını düşünüyorum. – bvgheluwe

+0

@BartVG - Takip ettiğimden emin değilim. İplik güvenliği bu tartışma ile ne yapmak zorundadır? Tüm bu metin, çok iş parçacıklı bir şekilde kullanılacaksa, nesnelere erişimi senkronize etmeniz gerektiği anlamına gelir. –