【发布时间】:2014-05-14 15:27:05
【问题描述】:
我创建了一个使用实体框架数据库的 asp.net odata web api 项目。这没什么特别的,很多教程都采用这种方法。我已经用用户和角色保护了这个 api,所以只有管理员才能真正使用 web api 保存一些东西。
我的下一步是让某些信息只有特定角色才能访问。例如,如果我将拥有一个具有 Salary 属性的实体 Employee。那么我将如何将对该属性的访问限制(读取)仅限于管理员?
编辑
我会尝试具体说明我的问题。 给定以下控制器:
public class EmployeeController : ApiController
{
public IQueryable<Employee> Get()
{
return _Db.Employees;
}
}
现在我可以编写 odata 查询,例如 http://api.com/employee?$select=FirstName,LastName,Salary&$orderby=Salary
如果我不希望某些人(或角色)按薪水排序,我可以实现 OrderByQueryValidator。 但是,我怎样才能完全隐藏普通用户的 Salary 属性,同时仍然允许管理员选择它呢?
所以,鉴于上面的控制器,我希望管理员能够执行这两个:
http://api.com/employee?$select=FirstName,LastName,Salary&$orderby=Salary
http://api.com/employee?$select=FirstName,LastName&$orderby=FirstName
虽然普通用户只能执行此操作:
http://api.com/employee?$select=FirstName,LastName&$orderby=FirstName
并在尝试选择 Salary 属性时出错。
【问题讨论】:
-
这就是你得到setter和getter的目的。
-
如果我在这种情况下使用 getter,我仍然必须返回一个默认值(或 null)。然后在我的 json 或 xml 响应中,我得到具有默认值的属性。这对我来说似乎不对。
标签: c# asp.net security asp.net-web-api