Asp.net mvc 3 根据用户权限覆盖ActionLink行为和参数以处理链接外观(asp.net mvc3)

Asp.net mvc 3 根据用户权限覆盖ActionLink行为和参数以处理链接外观(asp.net mvc3),asp.net-mvc-3,razor,actionlink,Asp.net Mvc 3,Razor,Actionlink,我想在我的网站中处理用户权限(编辑、阅读、新建),我正在考虑传递附加参数byteMyRoles,该参数具有用户权限代码,即:0-只读、1-完全控制、2-编辑和阅读 那么我如何重写Html.ActionLinkrazor方法来处理这个问题,我的方法是处理这个问题(用户权限)的最佳方法吗 我的方法是处理此问题(用户权限)的最佳方法吗 不,将角色作为参数传递给您的操作将代表一个安全缺陷,因为用户可以传递他喜欢的任何角色 正确的方法是使用角色提供程序。将角色与用户关联,然后定义用户需要在哪个角色中访问特

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

那么我如何重写
Html.ActionLink
razor方法来处理这个问题,我的方法是处理这个问题(用户权限)的最佳方法吗

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

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

正确的方法是使用角色提供程序。将角色与用户关联,然后定义用户需要在哪个角色中访问特定操作

例如:

[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,但您当然可以扩展或编写自定义的aspnetdb,以便查询您自己的数据。

好吧,这是一个很好的观点,如果用户有许多自定义角色,我的意思是在某个控制器中有“FullController”,但在另一个控制器中有“reader”,根据您的建议,在公司网站中,用户可能有10或100个角色。在这种情况下,您可以定义
FullController
Reader
角色,并使用户同时属于这两个角色。然后,您只需使用
[Authorize]
属性装饰控制器/操作,如我在回答中所示,并指定执行此操作所需的角色。您还可以通过逗号分隔多个角色来指定它们。授权发生在用户访问控制器时,ideas不显示“编辑”链接(如果用户只是一名读者),您的方法有效且安全,但要完成,我必须向用户显示唯一的授权链接,你的建议是什么?这就是我在回答的第二部分中提到的。您可以测试用户是否属于给定的角色(使用
if user.IsInRole(“SomeRole”)
)并有条件地显示链接,或者在呈现链接之前编写一个自定义帮助程序来执行此检查。好的,谢谢,很抱歉没有注意到第二部分,我认为这将使它成功。