2014-12-03 110 views
0

我想写一些自定义验证beforeSaveEntities(或beforeSaveEntity)需要验证当前登录的用户是所保存字段的所有者。我遇到的问题是如何访问当前用户。beforeSaveEntities验证与额外的参数

我具有分配给该验证用户令牌等,并存储在Request.Properties授权用户控制器的授权属性,但是我不能访问HttpRequestMessage内部beforeSaveEntities。是否有最好的做法,即使只有当前用户的userID进入这些功能?

回答

2

最简单的方法是给你的ContextProvider子类一个属性来保存你的用户信息。然后在您的网络控制器的方法,你必须:

[HttpPost] 
public SaveResult SaveChanges(JObject saveBundle) { 
    var contextProvider = new MyContextProvider(User currentUser); 
    return contextProvider.SaveChanges(saveBundle); 
} 

然后在ContextProviderBeforeSaveEntities方法将有机会获得用户。

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'方法的内容。希望这可以帮助!