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