我将把ASP.NET MVC 5.2项目的管理员和普通用户部分分开。我的管理区域和普通用户区域共享很多东西,但是它们各自的特权和详细信息是不同的。
现在,我不知道如何分隔管理区域和普通用户区域。我不知道是否应该为admin-panel创建不同的项目,还是只应该将admin路由到不同的路径并使用相同的控制器?还是应该路由到不同的路径并使用不同的视图/控制器?
另一个问题是,是否可能在同一ASP.Net MVC解决方案中将实际的管理员区和普通用户区分开?
通常,在应用程序中,有使用相同业务逻辑的各种端点。在这种情况下我们应该怎么做?我们可以轻松地复制一个端点并将其粘贴到另一个端点,但是一旦业务案例改变了,我们就需要在代码中的任何地方进行改变。
为了分离关注点,控制器应具有“代码”逻辑,而另一层应具有“业务”逻辑。例如,控制器可以定义属性的命名方式,但不能定义用户名的长度。无论哪个控制器尝试注册用户,用户名都应至少为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();
}
这里的“代码”逻辑是-创建服务,调用封装的编辑逻辑。另外,出于安全考虑,该操作应注意-Authorize
和Authorize Admin
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句