gpt4 book ai didi

c# - ASP.NET MVC2 访问控制 : How to do authorization dynamically?

转载 作者:太空宇宙 更新时间:2023-11-03 22:21:25 25 4
gpt4 key购买 nike

我们目前正在重写我们组织的 ASP.NET MVC 应用程序,该应用程序已经编写了两次。 (一次 MVC1,一次 MVC2)。 (谢天谢地,当时还没有生产就绪,而且太成熟了)。

无论如何,这一次将是真正的交易,因为随着时间的推移,我们将实现越来越多的功能,并且 MVC1 和 MVC2 的测试表明我们已准备好升级.

到现在为止,我们一直在通过 AuthorizeAttribute 使用 Controller 和 Action 授权。

但这不会再这样做了,因为我们的 View 应该根据登录用户显示不同的结果。

Use Case: Let's say you're a major of a city and you login to a federal managed software and you can only access and edit the citizens in your city.

允许您通过包含 MajorIdCityId 的专用 MajorHasRightsForCity 表中的条目访问这些公民。

我想到的是这样的:

Public ViewResult Edit(int cityId) {
if(Access.UserCanEditCity(currentUser, cityId) {
var currentCity = Db.Cities.Single(c => c.id == cityId);
Return View(currentCity);
} else {
TempData["ErrorMessage"] = "Yo are not awesome enough to edit that shizzle!"
Return View();
}

静态类 Access 会进行各种检查并从其方法中返回 true 或 false。

这意味着我每次更改某些内容时都需要更改和编辑我的所有 Controller 。 (这会很痛苦,因为每次发生变化时都需要调整所有单元测试..)

允许做这样的事情吗?

最佳答案

对于一个体面大小的应用程序,这几乎就是我要做的。

我会返回一个通用错误 View return View("Error");如果用户没有任何访问权限,那么您不需要处理每个 View 上的错误消息.

从概念上讲,这(Controller)是逻辑决定 View 的地方返回应该说谎。它阻止业务逻辑渗入 View .

您可以将页面的某些与角色相关的部分抽象为部分 View ,以减少困惑:

 <% if (User.IsInRole("Admin")) { %>
Html.RenderPartial("AdminPanel");
<% } %>

关于c# - ASP.NET MVC2 访问控制 : How to do authorization dynamically?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2958357/

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