ASP MVC中的视图中的权限

时间:2008-12-16 10:11:31

标签: asp.net-mvc user-interface permissions

我了解您可以使用表单身份验证根据您选择的条件授予/拒绝对某些页面的访问权限。

但是我希望比这更具体一点,并说,根据用户的权限为用户显示不同的按钮。

我知道我可以做类似

的事情
if(((User)ViewData["CurrentUser"]).IsEmployee).....

但这似乎并不优雅,很快就会变得混乱。

是否有任何可以帮助我的指南/工具/框架功能?

3 个答案:

答案 0 :(得分:6)

使用基于角色的身份验证,然后适当地设置角色。然后你可以做以下事情:

if (ViewContext.HttpContext.User.IsInRole("vEmployee") {

这样做的好处在于它是ASP.NET的核心功能 - 甚至不是特定于MVC的 - 因此它可以与每个可能的成员资格提供者一起使用。

然后,您可以为要有条件地显示的任何控件添加视图助手重载:

public static string TextBox(this HtmlHelper helper, 
    string name, string value, string role, object htmlAttributes)
{
   if helper.ViewContext.HttpContext.User.IsInRole(role) {
       return helper.TextBox(name, value, htmlAttributes);
   } 
   else
   {
       return null;
   }
}

......并称之为:

<%= Html.TextBox("name", "value", "vEmployee", null) %>

答案 1 :(得分:1)

前一段时间我对WPF应用程序有同样的问题。它也适用于ASP.NET。

对于每个“按钮”(WPF中的UserControl),您可以按属性设置执行其功能所需的角色。

在您的行动中,您需要创建一个需要特殊授权的所有“按钮”列表。

在调用“返回视图()”之前,您调用一个函数来迭代所有特殊的“按钮”,并根据用户的角色设置可见性。

对于WPF,因为你无法通过get / post请求调用方法...对于网络你应该做一些更复杂的东西而不仅仅是隐藏/显示按钮...

我希望这至少能为你提供一些线索...它对我的实现非常好,但它只是一个原型......但我想我将来会用它。

PS:可以找到示例代码here

答案 2 :(得分:-1)

不要这样做。将控制器用于那种逻辑