ASP.NET成员和角色
我正在开发一个带有ASP.NET
和C#
的博客引擎。 主要解决方案由以下几个项目组成
DomainModel
:存储库的域实体和接口 AppService
:应用程序服务,查看模型映射器,消息等 Repositories
:EF知识库,XML知识库,存根知识库 Presentation
:实现MVP模式(视图,演示者,界面) 目前用户端项目是一个WebForms
Web应用程序,并且该项目几乎完成。 最后一件事是将整个系统与ASP.NET Membership
集成在一起。 有两件事情需要考虑。
首先,只需要博客数据库中的成员资格数据库中的用户帐户ID
。 最后,基于角色的安全性必须在UI项目中实施。 因为我有点新分布式应用程序开发,DDD和东西,我想知道基于角色的安全性的实现只是UI应用程序的责任,或者有其他事情需要照顾在其他层解决方案。 据我所知,只有视图(网页)必须实现基于角色的安全性并呈现不同的内容,并根据当前会话提供不同的功能。 但是,这一切?
我知道这可能是一个通用的问题,当然实施和设计会根据项目需要而有所不同。 但是如果在分布式/分层应用程序中实现基于角色的安全性和表单身份验证时遵循一般的经验规则,那么事先了解它们将非常棒。 例如:
这三个问题似乎是相同的(杜)。
如果这是一个重复或偏离主题的问题,那么可以通过链接,参考和评论来帮助解决问题。 但如果没有,我想这是一个彻底的话题。 TNX
安全是一个横切关注点:涉及UI,应用程序和领域层。 我的理解是,你处理像“只有作者可以编辑博客”或“只有注册用户可以评论”的规则。 在这种情况下,用户界面应该了解这些规则,以决定是渲染“编辑”还是“评论”链接。 域对象应该能够执行这些规则。
据我所知,ASP.NET Membership做了很多事情,包括用户存储,认证,授权和角色管理。 但它不知道你的域名。 它不知道博客是什么。 它知道ASP页面是什么。 因此,如果您不想将域规则表达为页面访问规则,则可能需要在应用程序和ASP.NET成员资格之间划一条粗线。 您可能希望将用户存储和身份验证委派给ASP.NET,但您自己完成其他任务。 在您的域模块中不要直接依赖ASP.NET也可能是一个好主意。 如果您稍后决定从Web窗体切换到MVC,或者您的博客引擎将具有Web API,则还需要考虑ASP.NET Membership如何工作。
不确定后面的内容,但值得注意的是,标准PrincipalPermissionAttribute类可以很好地适用于使用此提供程序技术实现的ASP.NET角色。
这意味着您可以使用代码访问安全性和声明性属性来确保您的API /域/方法只能由特定角色的用户访问。 所以是的,你可以使用ASP.NET Membership强制UI层以外的安全性。
安全应该是所有应用程序的责任。 这真的取决于您的应用程序的结构。
我认为所有层级都应该有一些参与。 安全应该是其他服务可以使用的另一种服务。 这样你就可以在各个级别访问安全模型。 如果用户未被授权,管理用户界面可以立即阻止用户,但可以说数据检索服务可以检查它检索的对象对当前用户有效。
如果您想以其他方式使用数据模型,也可以通过Web服务或其他应用程序(例如Silverlight)获得优势。
更新
所有层级都需要注意安全性,因为所有层级都需要在某个时刻触及它。 用户界面需要它,因此它可以切换UI元素的开启和关闭。 服务需要注意它,以确保它们正在执行的操作对当前用户有效等等。
安全真的不应该是你在项目结束时想到的东西,只需打开。 它应该是各级应用程序设计的东西。
你如何实现它取决于你如何编写你的应用程序。 我会说最好的方法是在你的app和asp成员之间建立一个抽象层。 您将获得您已知的所有好处,例如测试,重新设计等
您可能想要考虑的一个问题是权限或权限的概念。 ASP没有处理这个问题的本地库,所以你不得不推出自己的。 任何时候你想做点什么,都要检查用户是否有权利。 这些权限可以分配给角色,而角色又可以分配给用户或用户组。 您可以对用户可以执行的操作进行细化控制,并且可以轻松地在将来添加新角色。
链接地址: http://www.djcxy.com/p/54623.html