首先,我使用EF 4.1并使用Repository和Unit Of Work模式。我们正在构建一个Web应用程序。
我正在使用EF 4的Code First方法开始我的项目。目前,数据库不存在。所以,我正在尝试制定一个策略来处理用户可以访问的数据以及逻辑应该放在我的框架中的位置。
假设用户登录系统并希望为系统创建用户。该表单有一个字段可以将新用户置于某种角色。负责创建此“新用户”的用户只能看到某些类型的角色(用户,创建者和查看者),但我们知道存在管理员角色,但此用户无权访问该角色。当我调用该服务给我那个角色列表时,我是否想要取回所有角色,然后根据某种权限集构建一个新列表?
我正在努力想到在我的存储库中有一些这样的逻辑,但实际上并不认为它适合那里。
答案 0 :(得分:2)
您的控制器可以对方法具有不同的Authorize属性decarations,招募其用户可以调用的角色,而不是由mvc框架抛出的异常。
http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx
答案 1 :(得分:2)
安全性应该在多个层面上,但我认为所有都会高于存储库。您的UI /菜单不应公开用户无权访问的功能,但您还应检查服务器,可能是在用户有权执行他们正在尝试的操作的应用程序服务层中。
对于用户角色,您可以在数据模型中构建角色关系,但我会将它们从数据库中全部带回来并缓存它们并使用代码逻辑过滤列表。但问题是你如何知道用户可以添加或不添加的角色?您可以使用特定的数字,留下空白,只允许某个角色的人创建角色等于或小于其角色的用户。
例如:
RoleID Role
1 Peon
5 Common Folk
10 King
15 Supreme Master of the Universe
所以也许只有Kings和SMU才有能力添加新用户。 SMU可以创建其他SMU,Kings,Common Folk和Peons。国王可以做同样的事情,减去SMU。 ID中的空白使您能够在以后添加更多角色而无需重新编号。