gpt4 book ai didi

c# - ASP.NET MVC : seperatation of concern for normal/admin user

转载 作者:行者123 更新时间:2023-11-30 23:28:23 24 4
gpt4 key购买 nike

我要将我的 ASP.NET MVC 5.2 项目的管理员和普通用户部分分开。我的管理区域和普通用户区域有很多共享的东西,但是它们各自的权限和详细信息是不同的。

现在我不知道如何分离管理区和普通用户区。我不知道我是否应该为管理面板创建不同的项目,或者我应该将管理员路由到不同的路径并使用相同的 Controller ?或者我应该路由到不同的路径并使用不同的 View / Controller ?

还有一个附带的问题,是否可以在同一个 ASP.Net MVC 解决方案中拥有物理上真正分开的管理区和普通用户区?

最佳答案

通常在应用程序中有多个端点使用相同的业务逻辑。在这种情况下我们应该怎么做?我们可以轻松地复制一个端点并将其粘贴到另一个端点,但一旦业务案例发生变化,我们就需要更改代码中的所有地方。

为了支持关注点分离, Controller 应该有“代码”逻辑,而另一层应该有“业务”逻辑。例如。 Controller 可能会定义属性的命名方式,但不会定义用户名的长度。无论哪个 Controller 尝试注册用户,用户名都应至少为 3 个字符。

为满足业务案例要求而使用实体模型进行的所有操作都应移至单独的层。通常称为服务层。

您的所有 Controller 都可以在不了解背后的业务场景的情况下使用任何这些服务。

此处的一个简单示例是两个 Controller 操作 - 一个 - 编辑您自己的配置文件,另一个 - 管理员编辑任意用户配置文件。

[Authorize]
public IActionResult Edit(UserViewModel model) {
if(model.Id != this.CurrentlyLoggedUser.Id) {
return this.RedirectToAction(...);
}

var userService = new UserService(); // inject maybe
userService.EditById(model.Id, model);

return this.View();
}

和管理员操作

[Authorize("Admin")]
public IActionResult Edit(UserViewModel model) {
var userService = new UserService(); // inject maybe
userService.EditById(model.Id, model);

return this.View();
}

这里的“代码”逻辑是——创建服务,调用封装的编辑逻辑。该操作还应注意一些安全原因 - AuthorizeAuthorize Admin

关于c# - ASP.NET MVC : seperatation of concern for normal/admin user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36024470/

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