Tamam, siteme ActionLink yöntemi aracılığıyla biraz güvenlik eklemek istiyorum. Kullanıcı eylem/denetleyiciye erişmek için yeterli haklara sahipse, ActionLink bu bağlantıyı oluşturmalıdır. Değilse, boş bir dize döndürmelidir. Şimdi, ActionLink statik bir yöntemdir ve bu onu daha da zorlaştırır. Yapmaya çalıştığım şeyi başarmanın bir yolu var mı?ActionLink davranışını nasıl geçersiz kılar?
cevap
yeni AuthorizeActionLink
uzantı yöntemi. Gerektiğinde aşırı yük. Kullanıcı çok iyi bir güvenlik değil Yani
static bool HasActionPermission(this HtmlHelper htmlHelper, string actionName, string controllerName)
{
ControllerBase controllerToLinkTo = string.IsNullOrEmpty(controllerName)
? htmlHelper.ViewContext.Controller
: GetControllerByName(htmlHelper, controllerName);
ControllerContext controllerContext = new ControllerContext(htmlHelper.ViewContext.RequestContext, controllerToLinkTo);
ReflectedControllerDescriptor controllerDescriptor = new ReflectedControllerDescriptor(controllerToLinkTo.GetType());
ActionDescriptor actionDescriptor = controllerDescriptor.FindAction(controllerContext, actionName);
return ActionIsAuthorized(controllerContext, actionDescriptor);
}
static bool ActionIsAuthorized(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
if (actionDescriptor == null)
return false;
AuthorizationContext authContext = new AuthorizationContext(controllerContext, actionDescriptor);
foreach (IAuthorizationFilter authFilter in actionDescriptor.GetFilters().AuthorizationFilters)
{
authFilter.OnAuthorization(authContext);
if (authContext.Result != null)
return false;
}
return true;
}
static ControllerBase GetControllerByName(HtmlHelper helper, string controllerName)
{
IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
IController controller = factory.CreateController(helper.ViewContext.RequestContext, controllerName);
if (controller == null)
{
throw new InvalidOperationException(
string.Format(
CultureInfo.CurrentUICulture,
"Controller factory {0} controller {1} returned null",
factory.GetType(),
controllerName));
}
return (ControllerBase)controller;
}
Yani aynı Html.ActionLink() yöntemiyle bunu yapmanın bir yolu yok mu? –
hayır, ama bence bu, tüm uygulama genelinde bu tür bir koşullu bağlantı görüntüsü yapmak için harika bir yoldur – hunter
tamam o zaman :) teşekkürler –
- 1. SonataUserBundle şablonları nasıl geçersiz kılar
- 2. Bağdaştırıcıyı geçersiz kılar.
- 3. Bir form etiketinin içinde bir düğme etiketinin "gönder" davranışını nasıl geçersiz kılar (devre dışı bırakılır)?
- 4. Serialization - readObject writeObject geçersiz kılar
- 5. Raylar doğrulama iletisini geçersiz kılar
- 6. Java enum'u geçersiz kılar toString()
- 7. Laravel'de Şifre Aracını nasıl geçersiz kılar/eklerim?
- 8. Android Retrofit - baseUrl'i nasıl geçersiz kılar
- 9. Yönlendirici'de devre dışı yöntemi nasıl geçersiz kılar?
- 10. Açısal yönlendirme, sekme ve daraltma panel eklentileri tarafından kullanılan href davranışını geçersiz kılar.
- 11. jQuery Mobile diğer CSS'yi geçersiz kılar
- 12. gereksinimleriDisplayForKey/actionForKey düzgün çalışmayı geçersiz kılar?
- 13. ! Önemli kural medya sorgularını geçersiz kılar mı?
- 14. kotlin 'onCreate' hiçbir şeyi geçersiz kılar
- 15. python'da sınıf değişkenini geçersiz kılar mı?
- 16. C# içinde miras alınan bir sınıf özelliğini nasıl geçersiz kılar?
- 17. drupal7'de bir web formu gönderme işlevini nasıl geçersiz kılar?
- 18. Pimcore Extjs farklı eklentilerdeki aynı yöntemi nasıl geçersiz kılar
- 19. jQuery'nin $ .ajax içinde XMLHttpRequest kullanımını nasıl geçersiz kılar?
- 20. Bir alt sınıfı bir alt sınıftan nasıl geçersiz kılar/genişletir?
- 21. Bir iç sınıfı bir endişeyle nasıl geçersiz kılar?
- 22. Raw ActionLink linkText
- 23. I18n kullanarak model öznitelik adlarını geçersiz kılar - bu işe yaramaz
- 24. intelliJ IDEA Java 8 lambda ifadeleriyle "Metodları geçersiz kılar" uyarısı
- 25. Mockito sınama yöntemini geçersiz kılar Bir istisna atar
- 26. WebGL GLSL Shader: texture2D'ye erişmek diğer dokuları geçersiz kılar
- 27. OpsWorks, özel JSON'u geçersiz kılar veritabanı.yml/ihmal Ediyor
- 28. UIScrollView, alt ekranın pan jest tanımlayıcılarını geçersiz kılar
- 29. std :: list <> :: ekleme, yineleyicileri geçersiz kılar. Gerekçe?
- 30. Web.config dosya ayarları IIS ayarlarını geçersiz kılar mı?
Yetkili eğer bulmaktan kirli işlerini
yöntemleri. Kullanıcı, bağlantının ne olduğunu anlayabiliyorsa, doğrudan girebilir. Bağlantının gizlenmesi yapmak için ekstra bir şey olabilir, ancak gerçek güvenliğiniz sunucuda yer almalıdır. –
Evet, bunu yaptım, hepsi kablolandığında harika. Bazı kodları kazacağım ... – hunter
@Matt, düzgün bir şekilde yapıldığında doğru değil. Bağlantıyı oluşturmadan önce sınıf/yöntemden 'Authorize' özniteliğini sorgulayan ActionLinks oluşturabilirsiniz. Böylece, bağlantının görünürlüğünü ve yönteme erişimi Yetkilendirme özniteliğinden başka bir şeyle kontrol edebilirsiniz. – hunter