2015-10-03 13 views
7

Özel öznitelikler hakkında birkaç şeyle uğraşmayı denedim ancak bu konuda nasıl gideceğimi hala bilmiyorum ....Öznitelik, Authorize özniteliğine benzer şekilde false değerini döndürürse, Girişe yeniden yönlendirilecek özel bir öznitelik nasıl oluşturulur: ASP.NET MVC

ben .. kullanıcı günlüğünün in bir kez Oturum çerezleri (ex UserID) 'de kullanıcı birkaç önemli ayrıntıları saklamak ve ben yapmak isteyen tüm bir öznitelik oluşturmak olduğunu

nerede

eğer if (Session["UserID"] == null)

daha sonra [Authorize] özniteliği gibi giriş yapmak için yönlendirir. Böylece bu özniteliği her yerde Denetleyici seviyesinde uygulayabilirim.

Yetkilendirme özniteliğinin üzerine yazmalı mıyım? Yeni bir tane mi oluşturdun? Giriş yapmak için yönlendirmeyi nasıl yapabilirim?

Ben de bir özel AuthorizeAttribute oluşturmak ve gerektiğinde AuthorizeCore() ve HandleUnauthorizedRequest() geçersiz kılabilir herhangi bir yardım

+0

[ 'IAuthorizationFilter'] (https://msdn.microsoft.com/ en-us/library/system.web.mvc.iauthorizationfilter% 28v = vs.100% 29.aspx)), aksi halde sorunuz çok geniştir: elde etmek istediğiniz şeyi çok daha iyi tanımlamanız gerekir. – Richard

+0

Üzgünüm Birini benim için kodlamaya çalışmıyorum, sanırım özellikle araştırmam gereken konularda yön arıyorum. – user1189352

+0

@Richard Bence tam da ihtiyacım olan şey bu. Bu yüzden, eğer IAuthorizationFilter'i uygularsam, başarısız olursa, bu sadece [Authorize] gibi Giriş'e yönlendirir mi? Sanırım en çok aradığım şey bu. – user1189352

cevap

13

için ASP.NET MVC 4

Teşekkür kullanıyorum. Denetimi yapacak ve gerekirse yönlendirecek kendi mantığınızı ekleyin.

Sadece kullanarak basit bir örnek gösteriyorum MVC en ActionFilterAttribute (kimlik doğrulama/yetkilendirme yapmak için en iyi yer değil ki)

public class VerifyUserAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var user = filterContext.HttpContext.Session["UserID"]; 
     if (user == null) 
      filterContext.Result = new RedirectResult(string.Format("/User/Login?targetUrl={0}",filterContext.HttpContext.Request.Url.AbsolutePath)); 
    } 
} 

uygun sonra /User/Login eylem yönteminde Session["UserID"] değişkeni ayarlamak unutmayın kullanıcı doğrulama.

+0

Hey Bunun için teşekkürler. Bu yüzden bakmam gereken tek şey, ActionFilterAttribute'u almak yerine, AuthorizeAttribute için nasıl yapılacağına bakmak ve iyi olmalı mı? Eğer bu doğruysa, ne yapmam gerektiğine dair iyi bir fikrim var. Teşekkürler! – user1189352

+0

@ user1189352 Yetkilendirme üstbilgilerini ve herhangi bir başka standart geçerliliği kullanmazsanız, bu bile işe yaramaz (sadece koş ve bir kez işaretle, ben yapmadım).Ancak, eğer yapabiliyorsanız, AuthorizeAttribute kullanma standart uygulamalarını izlemenizi öneririm. –

+0

Yetkilendirme başlıklarını kullanıyorum. Tüm denetleyicilerime [Yetki Ver] koydum (demek istediğin buysa). Bu durumda, bunun yerine Authorize özniteliğinin aşırı yüklenmesine bakmak benim için daha iyi olur mu? – user1189352

8

IAuthorizationFilter arabirimini uygulayarak Authorize özniteliğinin kendi sürümünü oluşturabilirsiniz.

class MyCustomFilter : FilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Session["UserID"] == null) 
     { 
      filterContext.Result = new RedirectResult("/"); 
     } 
    } 
} 

ve kullanım örneği: İşte bir örnek Kesinlikle (uygulamak yani tiplerini özel kimlik doğrulama filtreleri tanımlayabilirsiniz

[MyCustomFilter] 
public ActionResult About() 
{ 
    ViewBag.Message = "Your application description page."; 

    return View(); 
} 
+0

bunu ne kadar basit? tamam bu tura bakacağım – user1189352

+1

Evet, bu basit :) buradan çok daha fazlasını öğrenebilirsin: http://www.asp.net/mvc – Nasreddine

+0

Sadece bağımlılık enjeksiyonunun yapıcı tarafından böyle yapamayacağının farkında ol . Eğer DI'ye ihtiyacınız varsa, bu cevaba bakınız: http://stackoverflow.com/questions/16708942/should-i-be-using-an-iauthorizationfilter-if-i-wish-to-create-an-apikey-restrict –

İlgili konular