Typed Hierarchical Access Control System
-- from http://stackoverflow.com/questions/41522159/typed-hierarchical-access-control-system
import Policy
import Data.Monoid ((<>))
ownersCanEdit, contributorsCanView, myPolicy :: Policy
ownersCanEdit = mkPolicy Owner Edit
contributorsCanView = mkPolicy Contributor View
ownersCantEdit = mkPolicy Owner None
myPolicy = ownersCantEdit <> ownersCanEdit <> contributorsCanView
publicPolicy :: Policy
publicPolicy = mkPolicy Public Edit
canPublicView :: Policy -> Bool
canPublicView = Public `can` View
main = do
print $ canPublicView myPolicy
print $ (Owner `can` Edit) myPolicy
print $ (Owner `can` Edit) publicPolicy
print $ (Contributor `can` View) ownersCanEditINFO