我正在创建一个asp.net mvc应用程序,其中包含用户概念。每个用户都能够编辑自己的个人资料。例如:
- PersonID=1 可以通过访问 http://localhost/person/edit/1 来编辑他们的资料
- PersonID=2 可以通过访问 http://localhost/person/edit/2 来编辑他们的资料
没有什么特别的......
然而,我在授权方案上遇到了一些麻烦。系统中目前只有两个角色:“管理员”和“默认用户”,但未来可能会有更多角色。
我无法使用常规的Authorize属性来指定授权,因为这两个用户都属于相同的角色(即“默认用户”)。
因此,如果我像下面这样指定Authorize过滤器:
[Authorize(Roles = "DefaultUser")]
那么就没有影响。PersonID=1可以进入并编辑自己的个人资料(正如他们应该能够),但他们也可以更改URL为http://localhost/person/edit/2,然后完全访问和编辑PersonID=2的资料(这是不应该允许的)。
这是否意味着我必须创建自己的授权过滤器,在允许用户访问之前检查用户请求的操作是否“属于”他们?也就是说,如果当前登录的用户请求参数为1的编辑操作,我需要进行自定义检查以确保当前登录的人是PersonID=1,如果是,则授权给他们,如果不是,则拒绝访问吗?
感觉好像我漏了什么显而易见的东西,所以任何指导将不胜感激。