我正在尝试在beforeSaveEntities
(或beforeSaveEntity
)中编写一些自定义验证,需要验证当前登录的用户是要保存的字段的所有者。我遇到的问题是如何访问当前用户是谁。
我有一个分配给控制器的授权属性,用于验证用户令牌等,并将授权用户存储在Request.Properties
中,但我无法访问HttpRequestMessage
内的beforeSaveEntities
。是否有最佳做法可以将当前用户的userID
传递给这些函数?
答案 0 :(得分:2)
最简单的方法是为您的ContextProvider
子类提供一个属性来保存您的用户信息。然后在您的Web控制器方法中,您将拥有:
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle) {
var contextProvider = new MyContextProvider(User currentUser);
return contextProvider.SaveChanges(saveBundle);
}
然后BeforeSaveEntities
中的ContextProvider
方法可以访问用户。
答案 1 :(得分:0)
我花了一些时间来研究如何实现上面的答案,所以在这里添加了我的ContextProvider重载。
public class MyContextProvider : EFContextProvider<MyContext>
{
//The new local user object
private System.Security.Principal.IPrincipal User;
public CameraContextProvider(System.Security.Principal.IPrincipal user) : base()
{
this.User = user;
}
protected override bool BeforeSaveEntity(EntityInfo entityInfo)
{
if (!User.IsInRole("Admin"))
{
//whatever validations etc you need!
}
}
}
然后,在这个问题中使用Steve描述的'SaveChanges'方法的内容。希望这有帮助!