-1

我们正在使用 MVC 3 构建一个具有动态菜单选项的网站,以便用户只能看到菜单选项(操作链接),这些选项是基于组和个人权限允许他们看到的。

我们如何在运行时添加动态菜单选项(部分视图的链接)?我们是否对所有部分视图的所有链接进行硬编码,并使用可见性选项打开不需要的链接?我们可以从数据库中动态添加链接吗?

让我澄清一下。我们的管理员可以访问所有菜单选项,例如管理用户、管理组、管理供应商、管理产品和管理订单。我们有固定的销售人员,他们只需要管理供应商和管理订单。因此,基于此,我们只需要显示说 Manage Orders 和 Manage Supplier 的链接。因此,它们是我试图建立的链接的动态性质。我们在数据库中设置了权限。

贾瓦哈尔

4

2 回答 2

0

当您说“部分视图的链接”时,我不确定我是否完全理解您的意思。您永远不会真正拥有指向局部视图的超链接。我能想到的两种可能性是您想知道如何有条件地嵌入局部视图,或者您希望拥有指向返回局部视图的控制器操作的超链接。

在第一种情况下,您可以将 @Html.RenderPartial 调用放在 @if (myCondition == true) 块内。这样,只有在条件通过时才会显示局部视图。

在第二种情况下,您始终可以调用控制器操作。在您的控制器中,仅当您的条件匹配时才返回 PartialView。否则,返回空值。

于 2012-09-25T12:50:15.367 回答
0

我找到了一种使用带有 IPrincipal 的方法扩展来执行此操作的方法

public static bool IsAllowed(this IPrincipal p, string menuid) { 
if (p.Identity.IsAuthenticated) { 
         //Code here to verify privillegs against Database
     } 
     return false; 
} 

This would keep it fairly neat in you Layout.cshtml. 

@if (User.IsAllowed("menuchoice1")) { 
        <a href="@Url.Action(...)">...</a> 
} 
@if (User.IsAllowed("menuchoice2")) { 
      <a href="@Url.Action(...)>...</a> 
} 

希望这可以帮助其他寻找类似选择的人

于 2012-10-01T20:21:58.423 回答