yüzden, ben de yayını oluşturan yapabilmelerine izin gerekir benim Eylem MetoduAşağıdaki durum için özel Yetkilendirme özniteliği nasıl uygulanır?
[Authorize(Roles="Admin")]
public ActionResult EditPosts(int id)
{
return View();
}
Benim durumumda onlar mesajları düzenleyebilir ama (burada serin kısım geliyor) böylece yöneticiler yetki gerek var Normal bir kullanıcı olan gönderiyi düzenlemek için. Peki, postayı oluşturan kullanıcıları filtreleyenlere nasıl filtreleyebilirim, ancak diğerlerini yetkisiz bırakabilir miyim? PostEntry kimliğini bir yol parametresi olarak görüyorum ama atribute ve aynı zamanda öznitelikler sadece sabit parametreleri kabul ediyor, çok zor bir şeye benziyor, cevaplarınız çok beğeniliyor, Şerefe! onunla denetleyici eylemini süslemeleri sonra
public class AuthorizeAdminOrOwnerOfPostAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authorized = base.AuthorizeCore(httpContext);
if (!authorized)
{
// The user is not authenticated
return false;
}
var user = httpContext.User;
if (user.IsInRole("Admin"))
{
// Administrator => let him in
return true;
}
var rd = httpContext.Request.RequestContext.RouteData;
var id = rd.Values["id"] as string;
if (string.IsNullOrEmpty(id))
{
// No id was specified => we do not allow access
return false;
}
return IsOwnerOfPost(user.Identity.Name, id);
}
private bool IsOwnerOfPost(string username, string postId)
{
// TODO: you know what to do here
throw new NotImplementedException();
}
}
ve:
sen açın bakın yılına kadar bu görevde kimin oluşturduğu bilmiyor olabilir beri. Nesneyi nemlendirdikten sonra bu mantığı dahil etmek daha iyi olabilir. Aksi takdirde, bunu bir yön olarak uygularsanız, gönderiye iki kez bakmanız gerekebilir (bir kez yetkilendirme ve bir kez düzenleme için). –
bir nokta koydum, aslında ben bir kez onun kimliği rol girişinde ve ben tekrar kontrolör mantığını yapmak için arayacaktır. Veritabanına nasıl bir kez vurulacağına dair bir fikrin var mı? – Freeman
İyi bir ORM kullanıyorsanız ve içeriğinizi yetkilendirme çağrısından önce (söz konusu parça hakkında emin olmadan) ayarlarsanız bunu biraz daha düşünün, bu durumda 1. düzey önbellekte önbelleğe alınmalıdır. O zaman, ikinci hidratta bir vuruş olarak görmemelisin. –