2010-02-05 42 views
22

Genellikle eylemlerimi ile korurum, ancak bu sefer bir kullanıcının eylem içinde yetkili olup olmadığını kontrol etmem gerekiyor.Kullanıcının içinde yetkili olup olmadığı nasıl kontrol edilir?

Ör

if(userIsAuthorized) { 
    //do stuff 
} 
else { 
    //return to login page 
} 

ben kullanıyorum inanıyoruz

Bu soru tür benzer this etmektir 'Authentication Forms' ama verilen cevapların hiçbiri işe gibiydi.

DÜZENLEME: Daha fazla kazma yaptım - [Authorize] olan User.Identity değerine sahip bir Eylem üzerinde kesme noktası belirlesem de, ancak bunlar olmadan Eylemler'de, oturum açılsa bile User.Identity boştur

+0

Sorunumu bir hack-ish geçici çözümü kullanarak düzelttim, yanıtlarınızın doğru olduğunu varsaymak için gidiyorum ve garip bir şey yapmanın garip bir şekilde uygulanmasından kaynaklanıyor ... – elwyn

cevap

42

sadece kullanıcı giriş olmadığını bilmek isterseniz:

if (User.IsInRole("Administrators")) { ... } 

User örneği bir kamu malı şudur: role özgü bir şey yapmak çalışıyorsanız

if (User.Identity.IsAuthenticated) { ... } 

Controller sınıfı, böylece yazdığınız bir Denetleyiciden her zaman ona erişebilirsiniz. Eğer hiçbir kullanıcı giriş yapmamışsa User için GenericPrincipal ve User.Identity için bir GenericIdentity olmalıdır, bu yüzden boş değerleri kontrol etme konusunda endişelenme.

+0

Yine, bir "[Authorize]' 'Eylemi – elwyn

+0

@elwyn içinde kullanıldığında yalnızca bana "doğru" verir: Bunun doğru olduğuna inanmıyorum. Ben sadece [Authorize] 'özniteliği olmayan bir eylem üzerinde test ettim ve' User.Identity.IsAuthenticated' '' true'. Bunu test ettiğinizde oturumun gerçekten oturum açtığından emin misiniz? – Aaronaught

+0

@Aaronaught Evet, yalnızca çifte (üçlü) işaretli, bunu denerken eksik giriş yapmış ve hala yanlış görüyorsam – elwyn

1

İlk kullanımda hangi Yetkilendirmeyi kullandığınızı anlamanızı öneririm. ;)

Gönderdiğiniz yanıt doğru. [Authorize] özniteliği ve ilgili ActionFilter kodunun etrafına dolanıp hatırlamadığımdan MVC dahili olarak bu kod örnekleri gibi Page.User.Identity.IsAuthentically'ı çağırır. Yapmaya çalıştığınız şey için

+0

Double checked ve bu Formlar Kimlik Doğrulama – elwyn

3

Request.IsAuthenticated çalışmalıdır.

+3

Bunu, [Authorize] ile dekore edilmiş bir Eylem üzerinde gerçekleştirirseniz iyi çalışır, ancak eğer bu Eylem üzerinde ([Authorize] ile dekore edilmez) yaparsam, oturum açıp açmamam farketmez, her zaman yanlıştır. . – elwyn

1

böyle bir özelliği oluşturun:

[IsAuthenticatedAttribute] 
public ActionResult ActionName(parameters?) 
{ 
    // no need to worry about checking here. 
    //do you action things 
} 

: OnActionExecuting böyle öznitelik eklemek, denetlemek gereken her eylem eylem

 public class IsAuthenticatedAttribute : ActionFilterAttribute 
     { 
      public override void OnActionExecuting(ActionExecutingContext filterContext) 
      { 
       //do your validations here. and redirect to somewhere if needed. 
       filterContext.HttpContext.Response.Redirect("/") //this will send user to home. 
      } 
     } 

diğer kodundan önce ilk idam alacak EDIT: Bu, hala eylemi tamamlar ve sonra yalnızca yeniden yönlendirir. Çok yararlı değil.

İlgili konular