ASP.NET MVC:normal/admin 用户的关注点分离
ASP.NET MVC: seperatation of concern for normal/admin user
我要将我的 ASP.NET MVC 5.2 项目的管理员和普通用户部分分开。我的管理区域和普通用户区域有很多共享的东西,但是它们各自的权限和详细信息是不同的。
现在我不知道如何区分管理区和普通用户区。我不知道我是否应该为管理面板创建不同的项目,或者我应该将管理员路由到不同的路径并使用相同的控制器?或者我应该路由到不同的路径并使用不同的 views/controllers?
还有一个附带问题,是否可以在同一个 ASP.Net MVC 解决方案中将管理区和普通用户区真正分开?
通常在应用程序中有多个端点使用相同的业务逻辑。在这种情况下我们应该怎么做?我们可以轻松地复制一个端点并将其粘贴到另一个端点,但是一旦业务案例发生变化,我们就需要更改代码中的所有地方。
为了支持关注点分离,控制器应具有 "code" 逻辑,另一层应具有 "business" 逻辑。例如。控制器可能会定义属性的命名方式,但不会定义用户名的长度。无论哪个控制器尝试注册用户,用户名都应至少为 3 个字符。
所有满足业务案例要求的实体模型操作都应移至单独的层。通常称为服务层。
您的所有控制器都可以使用任何服务,而无需了解背后的业务场景。
此处的一个简单示例是两个控制器操作 - 一个 - 编辑您自己的配置文件,另一个 - 管理员编辑任意用户配置文件。
[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();
}
这里的"code"逻辑是——创建服务,调用封装的编辑逻辑。该操作还应注意一些安全原因 - Authorize
和 Authorize Admin
.
我要将我的 ASP.NET MVC 5.2 项目的管理员和普通用户部分分开。我的管理区域和普通用户区域有很多共享的东西,但是它们各自的权限和详细信息是不同的。
现在我不知道如何区分管理区和普通用户区。我不知道我是否应该为管理面板创建不同的项目,或者我应该将管理员路由到不同的路径并使用相同的控制器?或者我应该路由到不同的路径并使用不同的 views/controllers?
还有一个附带问题,是否可以在同一个 ASP.Net MVC 解决方案中将管理区和普通用户区真正分开?
通常在应用程序中有多个端点使用相同的业务逻辑。在这种情况下我们应该怎么做?我们可以轻松地复制一个端点并将其粘贴到另一个端点,但是一旦业务案例发生变化,我们就需要更改代码中的所有地方。
为了支持关注点分离,控制器应具有 "code" 逻辑,另一层应具有 "business" 逻辑。例如。控制器可能会定义属性的命名方式,但不会定义用户名的长度。无论哪个控制器尝试注册用户,用户名都应至少为 3 个字符。
所有满足业务案例要求的实体模型操作都应移至单独的层。通常称为服务层。
您的所有控制器都可以使用任何服务,而无需了解背后的业务场景。
此处的一个简单示例是两个控制器操作 - 一个 - 编辑您自己的配置文件,另一个 - 管理员编辑任意用户配置文件。
[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();
}
这里的"code"逻辑是——创建服务,调用封装的编辑逻辑。该操作还应注意一些安全原因 - Authorize
和 Authorize Admin
.