gpt4 book ai didi

ASP.Net MVC 身份验证 - 基于角色隐藏 View 中的元素

转载 作者:行者123 更新时间:2023-12-03 16:42:12 25 4
gpt4 key购买 nike

是否有可能将授权属性的结果移交给 View ?

假设我想根据用户的成员资格在我的索引 View 中隐藏 5 个链接。

[Authorize(Roles = "Admin")]
public ActionResult Index(){
....
}

上面的代码将阻止所有不属于 Admin-Group 的用户访问 Index 页面。
@{
if(User.IsInRole("Admin"){
<a href="#">Some link to be hidden</a>
}
}

如果用户不是管理员角色的一部分,此代码将隐藏链接。这基本上是我想要的,但是使用这种方法,如果角色发生变化,我必须更改每个隐藏链接上的角色名称。

不是有类似两者结合的东西吗? (架构见下文)
[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>
}
}

所以 - 如果用户的角色是“管理员”,则将显示该链接。这可能吗?

最佳答案

您可以使用 ViewBagViewData除其他外,但我建议将模型传递回具有指示是否显示链接的属性的 View 。

public class YourViewModel()
{
public bool ShowHiddenLinks { get; set; }
// ... whatever other properties
}

在您的 Controller 中,您将执行以下操作:
[Authorize(Roles = "Admin")] 
public ActionResult Index()
{
var yourVm = new YourViewModel();
yourVm.ShowHiddenLinks = true;

return View(yourVm);
}

你的观点变成:
@model YourViewModel

/* ShowHiddenLinks is true & this view is meant for admins only,
so show admin-related links */
@if (Model.ShowHiddenLinks)
{
<a href="#">Some link to be hidden</a>
}

我将 viewmodel 属性命名为 ShowHiddenLinks故意,以便它也可用于其他用户的 View 。您当然可以将 View 模型扩展为其他角色的特性属性(例如,管理员和版主可以访问的 View ,每个 View 都有自己独特的一组隐藏链接),或者为每个角色创建一个 View 模型——这一切都取决于场景。

关于ASP.Net MVC 身份验证 - 基于角色隐藏 View 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40138070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com