私の_Layoutに私のメニューツールバーがあります。サブメニューを非表示にしたいのですが、誰が接続しているか(管理者かユーザーか)によって決まります。私のカミソリ_Layoutのサブメニューを隠すには?
ユーザープロファイルはuserViewModelに格納されていますが、_layoutにuserViewModelを設定することはできません。
私の_Layoutに私のメニューツールバーがあります。サブメニューを非表示にしたいのですが、誰が接続しているか(管理者かユーザーか)によって決まります。私のカミソリ_Layoutのサブメニューを隠すには?
ユーザープロファイルはuserViewModelに格納されていますが、_layoutにuserViewModelを設定することはできません。
あなたは
@Html.Action("MenuToolbar","Controller")
public ViewResult MenuToolbar()
{
if (user.isAdministrator)
return View("MenuToolbar");
else return View("Empty");
}
たり、より普遍的なアプローチを使用することができますによって_layoutのメニューツールバーをレンダリングすることができます。
public static MvcHtmlString ActionBaseRole(this HtmlHelper value, string actionName, string controllerName, object routeValues , IPrincipal user)
{
bool userHasRequeredRole = false;
Type t = Type.GetType((string.Format("MyProject.Controllers.{0}Controller",controllerName))); // MyProject.Controllers... replace on you namespace
MethodInfo method = t.GetMethod(actionName);
var attr = (method.GetCustomAttribute(typeof(AuthorizeAttribute), true) as AuthorizeAttribute);
if (attr != null)
{
string[] methodRequeredRoles = attr.Roles.Split(',');
userHasRequeredRole = methodRequeredRoles.Any(r => user.IsInRole(r.Trim())); // user roles check in depends on implementation authorization in you site
// In a simple version that might look like
}
else userHasRequeredRole = true; //method don't have Authorize Attribute
return userHasRequeredRole ? value.Action(actionName, controllerName, routeValues) : MvcHtmlString.Empty;
}
あなただけ を置く必要がある。この場合、アクションのためには[Authorize(Roles = "Administrator, OtherRole")]
です。
ありがとう、最初のソリューションは私が探していたものでした。時には、シンプルな方法を見つけるのは難しいです... :-) – Cooxkie
基本的に、user_profile == administratorの場合は、メニューツールバーを表示しますか? –
http://stackoverflow.com/questions/4381189/accessing-a-session-object-from-razor-layout-cshml – CodeCaster
ViewDataまたはViewBagを使用 –