module Gargantext.API.GraphQL.PolicyCheck where import Prelude import Control.Monad.Except (MonadError(..), MonadTrans(..)) import Gargantext.API.Admin.Auth.Types ( AuthenticatedUser ) import Gargantext.API.Auth.PolicyCheck ( BoolExpr, AccessCheck, AccessPolicyManager(..), AccessResult(..)) import Gargantext.API.Errors.Types ( BackendInternalError(..) ) import Gargantext.API.GraphQL.Types (GqlM) import Gargantext.Core.Config (HasConfig) import Gargantext.Database.Prelude (HasConnectionPool) withPolicy :: (HasConnectionPool env, HasConfig env) => AuthenticatedUser -> AccessPolicyManager -> BoolExpr AccessCheck -> GqlM e env a -> GqlM e env a withPolicy ur mgr checks m = case mgr of AccessPolicyManager{runAccessPolicy} -> do res <- lift $ runAccessPolicy ur checks case res of Allow -> m Deny err -> lift $ throwError $ InternalServerError $ err