Reh*_*que 10 haskell authorization access-control rbac yesod
我想知道Handler在Yesod中为用户/权限或资源添加角色的最佳方法是什么.有没有人有这种东西的先前艺术?是否有任何方法利用类型系统来帮助防止漏洞(并且还要保持数据库查询以检查所有权等)?
编辑:很抱歉错过了这个 - 我确实注意到实际上有一个部分,我乍一看(我认为因为没有提及访问/角色/权限),在Yesod书中的授权.这似乎在路由器级别使用PUT/POST的写标志进行访问控制.它本身看起来并不十分复杂,但它看起来很适合在顶部构建抽象...
自发布以来,我发现这篇非常有用的博客文章由Felipe Lessa 使用Yesod提取了抽象权限。它建立在现有isAuthorized功能的基础之上,展示了一种简单的策略,可以为用户添加角色并访问资源权限。
基本上它定义
isAuthorizedTo :: Maybe (UserId, User) -> [Permission] -> YesodDB sub Blog AuthResult
permissionsRequiredFor :: Route Blog -> Bool -> [Permission]
Run Code Online (Sandbox Code Playgroud)
为了得到这样的东西:
isAuthorized route isWrite = do
mauth <- maybeAuth
runDB $ mauth `isAuthorizedTo` permissionsRequiredFor route isWrite
Run Code Online (Sandbox Code Playgroud)
其中permissionsRequiredFor返回一些用户定义的Permission数据类型的列表,如下所示:
data Permission = Post -- Permission to create blog posts
| CommentOn EntryId -- Permission to comment on a particular blog entry
| View EntryId -- Permission to view a particular blog entry
Run Code Online (Sandbox Code Playgroud)
这简单实用,谢谢费利佩。(如果有人尝试以库形式捕获此类内容并将其发布到Hackage,以便尽快找到访问控制并将其放到您的应用中,这可能会很好!或者可能是在Yesod支架中?)