有一个web应用程序在服务器上使用以下堆栈: akka-persistence/service-layer/akka-http (用于REST)
问题是:我如何才能--以最优雅、最干练的方式--确保只有那些有权在服务层执行函数的用户(在给定的输入参数下)才能执行函数。
举个例子,让我们举个简单的例子:
getEntity(userID:UserID, ref:EntityID):Entity =?
当调用者的userID与参数中的userID相同时,我应该如何修改getEntity,以便只允许那些用户执行它?
通常情况下,最优雅、最沉着、最干练的方式是什么?
使用定制的monad?
使用延续单体?
使用akka-http样式指令?
使用隐含?
使用Free-Monads?
使用箭头?
使用Kleiesly?
我真的无法想象。
发布于 2017-08-06 23:38:48
我将如何使用隐式上下文:
getEntity(userID:UserID, ref:EntityID)(implicit c: Context): Entity = ???然后,上下文中的任何内容都取决于您,即
trait Context {
def canExecute(userId: UserID): Boolean
}您可能希望将其拆分,以便拥有角色、权限等。此外,如果您使用的是类型参数,则可以使用上下文绑定,使其更简洁:
trait Context[A] { ... }
def getEntity[A: Context](userID:UserID, ref:EntityID): Entity = ???隐式参数非常适合于传递上下文信息,如“当前安全上下文”或“相关id”,这些信息不是域逻辑的核心,但必须涉及整个堆栈。
https://stackoverflow.com/questions/45531583
复制相似问题