我有一个 3 层 ASP.NET MVC 3 项目,它有一个数据层、一个服务层,然后是一个调用服务层以获取数据的表示层。我实际上在行动解决方案中使用了 doFactory 模式。
我想实现自定义成员资格、角色、个人资料提供者,但我不确定具体放在哪里。我想把它放在服务层,然后让提供者调用 DAO 对象来获取信息。
还有其他想法吗?
最佳答案
你的想法很好。虽然 UI 层与客户端交互并获取他们的密码,但您的服务层应该处理进入系统的尝试。
您的操作方法将信息传递给负责授权的服务对象。
您的服务层不知道它是否在 Web 应用程序中。
数据层只是存储信息的地方,而不是处理信息的地方。
您可能会选择在 session 中将用户 ID 保留在 UI 层中。登录时,服务层将采用用户名/密码/任何内容并返回用户 ID。或者,您的操作方法可以每次将 session key 传递到服务层,以获取用户信息。
编辑 由于评论:我在我当前的项目中这样做(几百万美元的范围)。我在操作方法中有我的安全决定。 (当然,使这一切变得简单的工具是来自服务层的对象。)例如,如果当前用户没有这个角色或那个角色,则将他们重定向到拒绝页面,否则,执行此操作。 MyServiceLayerObject.DoThing()
内部没有安全措施。
对于我的应用和许多其他应用来说,这是最简单的方法。 (“最简单”意味着它会被搞砸的最少。当涉及到安全性时,简单就是好!)由于 Action 方法是功能的门户,在服务层具有安全性只会导致额外的工作,实际上 < em>模糊 发生了什么安全事件。现在,这就是我的应用,通常每个操作都在一个地方发生。
您的应用可能有所不同。使用服务层功能的不同操作方法和(尤其是)不同组件越多,您就越希望使用授权方案锁定服务层功能。许多人认为安全性应该始终在服务层,并且 UI 层中的任何额外安全操作都是额外的冗余。我不同意这一点。
关于c# - 在 3 层设置中在哪里可以找到自定义成员资格、角色、配置文件提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5453783/