forked from snapframework/snap
/
Role.hs
25 lines (20 loc) · 868 Bytes
/
Role.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
module Control.Access.RoleBased.Role where
------------------------------------------------------------------------------
import qualified Data.HashMap.Strict as M
import Control.Access.RoleBased.Internal.Types
import Data.Text (Text)
------------------------------------------------------------------------------
matches :: Role -> Role -> Bool
matches (Role a1 d1) (Role a2 d2) =
a1 == a2 && dmatch (toSortedList d1) (toSortedList d2)
where
dmatch [] _ = True
dmatch _ [] = False
dmatch dds@(d:ds) (e:es) =
case compare d e of
LT -> False
EQ -> dmatch ds es
GT -> dmatch dds es
------------------------------------------------------------------------------
addRoleData :: Text -> RoleValue -> Role -> Role
addRoleData k v (Role n d) = Role n $ M.insert k v d