C4p*_*1nZ 5 asp.net asp.net-mvc asp.net-mvc-4
是否有可能将授权属性的结果移交给视图?
假设我想根据用户的成员资格在我的索引视图中隐藏 5 个链接。
[Authorize(Roles = "Admin")]
public ActionResult Index(){
....
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将阻止所有不属于 Admin-Group 的用户访问 Index 页面。
@{
if(User.IsInRole("Admin"){
<a href="#">Some link to be hidden</a>
}
}
Run Code Online (Sandbox Code Playgroud)
如果用户不是管理员角色的一部分,此代码将隐藏链接。这基本上是我想要的,但是使用这种方法,如果角色发生变化,我必须更改每个隐藏链接上的角色名称。
不是有类似两者结合的东西吗?(架构见下文)
[Authorize(Roles = "Admin")] //This will pass true to the View if the User is a member of the group "Admin"
public ActionResult Index(){
....
}
@{
if(User.IsAuthenticated){ //This will read the "Token" and if it's true the if statement will get executed.
<a href="#">Some link to be hidden</a>
}
}
Run Code Online (Sandbox Code Playgroud)
所以 - 如果用户的角色是“管理员”,则将显示该链接。这可能吗?
您可以使用ViewBag等ViewData,但我建议将模型传递回视图,并使用指示是否显示链接的属性。
public class YourViewModel()\n{\n public bool ShowHiddenLinks { get; set; }\n // ... whatever other properties\n}\nRun Code Online (Sandbox Code Playgroud)\n\n然后在您的控制器中执行以下操作:
\n\n[Authorize(Roles = "Admin")] \npublic ActionResult Index()\n{\n var yourVm = new YourViewModel();\n yourVm.ShowHiddenLinks = true;\n\n return View(yourVm);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n你的观点变成:
\n\n@model YourViewModel\n\n/* ShowHiddenLinks is true & this view is meant for admins only,\n so show admin-related links */\n@if (Model.ShowHiddenLinks)\n{\n <a href="#">Some link to be hidden</a>\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我特意命名了 viewmodel 属性ShowHiddenLinks,以便它也可以重复用于其他用户的视图。当然,您可以将视图模型扩展到其他角色的功能属性(例如,管理员和版主可以访问的视图,每个视图都有自己独特的一组隐藏链接),或者为每个角色创建一个视图模型\xe2\x80\x94,这一切都取决于关于场景。
| 归档时间: |
|
| 查看次数: |
8972 次 |
| 最近记录: |