我试图弄清楚如何适应用户权限和获取数据。这不是一个简单的任务,如
GetInvoices where Invoice.UserId = 5
所以我可以将userId传递给一个方法,但它非常复杂,而且我不想比需要更深入,它会造成混乱。 Currenly它的工作方式如下:View调用ViewModel上的命令,ViewMOdel调用存储库方法,使用EF获取数据。现在我需要根据用户权限过滤这些数据。
逻辑上,VIewModel应该强制执行业务规则。这是否意味着我应该在ViewModel中创建IQueriable,并将其传递给模型?
或者,可以做
... if(LoggedUser.Role.Permissions.any(x => x.PErmissionType == somePermission)&& ....)
在(M)奥德尔一侧?
答案 0 :(得分:1)
您的 DAL 是根据用户的权限获取和过滤结果的 {{3}} 。换句话说,VM应该只接收用户可以看到的模型/数据 如您所述,VM会强制执行业务规则,但我不确定模型过滤是否适合此类别。
你应该做的是当VM请求数据时,他应该传递根据权限(用户ID或用户拥有的权限集)过滤数据所需的任何内容,并且只传递数据应该返回适合他的权限。