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