10

我有两个存储库目录和用户,我有一种情况需要从用户存储库调用目录存储库中的方法,这是一种好的做法还是有更好的方法?

4

3 回答 3

9

您不应该在您的存储库中处理此类授权检查。诸如“此用户需要 X 条评论才能发布”之类的业务规则并不是真正的存储库查询,它是您的用户的属性。

此外,应用程序中的授权调用非常频繁,您真的不想每次需要检查时都访问数据库。

您应该将这些权限正确加载到您的用户对象中,然后为当前请求缓存该对象,并使用您的域:

public class Service {

    public void Save(Post post)
    {
        if(User.GetCurrentUser().HasEnoughCommentsToPost())
            postRepository.Add(post);
    }

}
于 2009-08-04T16:13:24.300 回答
6

我会在上层引用其他存储库,例如服务层

于 2009-07-27T11:37:17.423 回答
0

我认为在您的情况下,授权是您的域逻辑的一部分。所以我会在我的域层中创建一个名为 AuthorizationPolicy 的抽象类或接口(也许你可以找到更接近你的域的更好的名称)。在调用存储库上的方法之前,客户端应检查是否具有基于策略的权限。

另一种解决方案,因为存储库的接口也是业务逻辑的一部分,您可以为存储库创建一个基类,检查用户的权限并将其余部分委托给派生类。

如果需要,AuthorizationPolicy 的实现将与 Catalog 类对话。这样,两个存储库就很好地解耦了。

于 2009-08-04T18:56:36.093 回答