这是我使用表单身份验证的 MVC 4 Internet 项目的问题。假设我有酒店,我希望授权用户以不同的角色访问每个酒店。
所以用户登录。然后从下拉列表中选择目标酒店,应用程序的安全性相应地做出响应。
我需要 [Authorize(Roles = "Administrator")] 之类的东西,但仅限于该酒店范围内。
我的第一个方法是从 AuthorizeAttribute 继承并覆盖 AuthorizeCore 就像在这个 线程中显示的那样
从那里我可以获得 HttpContext.Session["HotelId"] 并查询 UserRolesInHotel 表。也就是说,我应该有自己的角色表,其结构类似于 UserId、RoleId、HotelId。所以 SimpleRolePrivider 无法完成这项任务,我将被迫创建一个 CustomerRoleProvider。RoleProvider 方法在向用户添加新角色时不会处理我需要的额外参数,例如 HotelId。
为了澄清:
- 用户 A 使用用户/密码登录 -> OK (SimpleMembershipProvider)
- 经过身份验证的用户 A 选择酒店 1 -> 用户 A 是酒店 1 的“管理员”。
- 经过身份验证的用户 A 更改为酒店 2 -> 用户 A 是酒店 2 中的“用户”
我可以拥有任意数量的酒店。
- 用户 A -> 酒店 1 -> {“管理员”,“用户”}
- 用户 A -> 酒店 2 -> {“用户”}
- 用户 A -> 酒店 3 -> {“所有者”}
- 用户 A -> 酒店 4 -> {“管理员”}
角色列表始终相同。
几天来我一直在努力解决这个问题,但我想不出一个实用的解决方案。任何想法将不胜感激。
谢谢!