我有以下实体:
public class Company {
public Int32 CompanyId { get; set; }
public String Name { get; set; }
}
public class Project {
public Int32 ProjectId { get; set; }
public String Name { get; set; }
public virtual Company { get; set; }
}
public class ProjectUser {
public Int32 UserId { get; set; }
public String ProjectId { get; set; }
}
public class User {
public Int32 UserId { get; set; }
public String Name { get; set; }
}
我需要创建一个Api端点才能获得公司的项目:
companies/{companyId}/projects
此网址有意义,但返回的项目应限于:
提供的公司中与当前经过身份验证的用户相关联的项目(ProjectUser);
OR
如果当前经过身份验证的用户是系统管理员,则提供的公司中的所有项目。
问题
因此,此请求取决于经过身份验证的用户...
我应该在请求中发送UserId,然后在API中检查其权限吗?
如果是,则网址如何,例如companies/{companyId}/projects
,成为吗?
还是我应该简单地获取经过身份验证的用户并在API中检查其权限,而不在请求中发送UserId?
答案 0 :(得分:1)
后者。您的请求应该得到授权,最有可能的方式是发送带有先前获得的访问令牌的Authorization
标头。您不应该也不需要将用户ID与请求一起发送。那将通过用户主体,特别是通过NameIdentifier
声明来获得。至于您的资源级授权,您将使用从委托人获得的用户ID,以确保经过身份验证的用户可以最通常通过资源本身上的外键访问该资源。 docs有更详尽的指南。