2016-05-31 15 views
0

私の_Layoutに私のメニューツールバーがあります。サブメニューを非表示にしたいのですが、誰が接続しているか(管理者かユーザーか)によって決まります。私のカミソリ_Layoutのサブメニューを隠すには?

ユーザープロファイルはuserViewModelに格納されていますが、_layoutにuserViewModelを設定することはできません。

+0

基本的に、user_profile == administratorの場合は、メニューツールバーを表示しますか? –

+0

http://stackoverflow.com/questions/4381189/accessing-a-session-object-from-razor-layout-cshml – CodeCaster

+0

ViewDataまたはViewBagを使用 –

答えて

1

あなたは

@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")]です。

+0

ありがとう、最初のソリューションは私が探していたものでした。時には、シンプルな方法を見つけるのは難しいです... :-) – Cooxkie

関連する問題