我了解您可以使用表单身份验证来根据您选择的标准授予/拒绝对某些页面的访问权限。
但是,我希望比这更具体一点,并说,根据用户的权限为用户显示不同的按钮。
我知道我可以做类似的事情
if(((User)ViewData["CurrentUser"]).IsEmployee).....
但这似乎不是很优雅,并且很快就会变得混乱。
是否有任何指南/工具/框架功能可以帮助我?
我了解您可以使用表单身份验证来根据您选择的标准授予/拒绝对某些页面的访问权限。
但是,我希望比这更具体一点,并说,根据用户的权限为用户显示不同的按钮。
我知道我可以做类似的事情
if(((User)ViewData["CurrentUser"]).IsEmployee).....
但这似乎不是很优雅,并且很快就会变得混乱。
是否有任何指南/工具/框架功能可以帮助我?
使用基于角色的身份验证,然后适当地设置角色。然后您可以执行以下操作:
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) %>
不久前,我在 WPF 应用程序中遇到了同样的问题。它也适用于 ASP.NET。
对于每个“按钮”(WPF 中的 UserControl),您通过属性设置执行其功能所需的角色。
在您的操作开始时,您创建一个需要特殊授权的所有“按钮”的列表。
在调用“return View()”之前,您调用一个函数来迭代所有您的特殊“按钮”并设置基于用户角色的可见性。
对于工作的 WPF,因为您不能通过 get/post 请求调用该方法...对于网络,您应该制作更复杂的东西,而不仅仅是隐藏/显示按钮...
我希望这至少能给你一个线索......它在我的实现中工作得很好,但它只是一个原型......但我想我将来会使用它。
PS:示例代码可以在这里找到
不要这样做。将控制器用于这种逻辑