Quick actions

cmd+k|ctrl+k

Navigation

Languages

Typed Hierarchical Access Control System

Snippet info

Language

Haskell

Visibility

public

Author

homam

Created

2017-01-07T23:35:55Z

Updated

2017-01-07T23:35:55Z

-- 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) ownersCanEdit
INFO