覆盖ActionLink行为,以及根据用户权限处理链接外观的参数(asp.net mvc3)

时间:2012-08-17 21:05:51

标签: asp.net-mvc-3 razor actionlink

我想在我的网站中处理用户权限(编辑,阅读,新),我正在考虑传递具有用户权限代码的附加参数字节MyRoles,即:0-只读,1 - 完全控制, 2编辑和阅读

那么我如何覆盖Html.ActionLink razor方法来处理它,并且我的方法是处理此问题的最佳方法(用户权限)?

1 个答案:

答案 0 :(得分:0)

  

并且我的方法是处理此问题的最佳方法(用户权限)?

不,将角色作为参数传递给您的操作会代表一个安全漏洞,因为用户可以传递他喜欢的任何角色。

执行此操作的正确方法是使用角色提供程序。您可以将角色与用户关联,然后定义用户在访问特定操作时所需的角色。

例如:

[Authorize(Roles = "Readers")]
public ActionResult SomeAction() 
{
    // only users belonging to the readers role will be able to access this action
}

一旦您正确地保护了服务器端,您可以在Razor视图中有条件地显示/隐藏锚点和内容:

@if (User.IsInRole("Readers"))
{
    @Html.ActionLink("read the news", "SomeAction")
}

为避免编写这些ifs,您可以编写自定义HTML帮助程序:

@Html.RoleActionLink("read the news", "Some Action", "Readers")

默认的成员资格和角色提供者使用默认的aspnetdb,但您当然可以扩展或编写自定义的aspnet以查询您自己的数据。