stratosphere-0.1.0: library-gen/Stratosphere/Resources/Policy.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
-- | The AWS::IAM::Policy resource associates an IAM policy with IAM users,
-- roles, or groups. For more information about IAM policies, see Overview of
-- IAM Policies in the IAM User Guide guide.
module Stratosphere.Resources.Policy where
import Control.Lens
import Data.Aeson
import Data.Aeson.Types
import Data.Text
import GHC.Generics
import Stratosphere.Values
-- | Full data type definition for Policy. See 'policy' for a more convenient
-- constructor.
data Policy =
Policy
{ _policyGroups :: Maybe [Val Text]
, _policyPolicyDocument :: Object
, _policyPolicyName :: Val Text
, _policyRoles :: Maybe [Val Text]
, _policyUsers :: Maybe [Val Text]
} deriving (Show, Generic)
instance ToJSON Policy where
toJSON = genericToJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
instance FromJSON Policy where
parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = Prelude.drop 7, omitNothingFields = True }
-- | Constructor for 'Policy' containing required fields as arguments.
policy
:: Object -- ^ 'pPolicyDocument'
-> Val Text -- ^ 'pPolicyName'
-> Policy
policy policyDocumentarg policyNamearg =
Policy
{ _policyGroups = Nothing
, _policyPolicyDocument = policyDocumentarg
, _policyPolicyName = policyNamearg
, _policyRoles = Nothing
, _policyUsers = Nothing
}
-- | The names of groups to which you want to add the policy.
pGroups :: Lens' Policy (Maybe [Val Text])
pGroups = lens _policyGroups (\s a -> s { _policyGroups = a })
-- | A policy document that contains permissions to add to the specified users
-- or groups.
pPolicyDocument :: Lens' Policy Object
pPolicyDocument = lens _policyPolicyDocument (\s a -> s { _policyPolicyDocument = a })
-- | The name of the policy. If you specify multiple policies for an entity,
-- specify unique names. For example, if you specify a list of policies for an
-- IAM role, each policy must have a unique name.
pPolicyName :: Lens' Policy (Val Text)
pPolicyName = lens _policyPolicyName (\s a -> s { _policyPolicyName = a })
-- | The names of AWS::IAM::Roles to attach to this policy. Note If a policy
-- has a Ref to a role and if a resource (such as AWS::ECS::Service) also has
-- a Ref to the same role, add a DependsOn attribute to the resource so that
-- the resource depends on the policy. This dependency ensures that the role's
-- policy is available throughout the resource's lifecycle. For example, when
-- you delete a stack with an AWS::ECS::Service resource, the DependsOn
-- attribute ensures that the AWS::ECS::Service resource can complete its
-- deletion before its role's policy is deleted.
pRoles :: Lens' Policy (Maybe [Val Text])
pRoles = lens _policyRoles (\s a -> s { _policyRoles = a })
-- | The names of users for whom you want to add the policy.
pUsers :: Lens' Policy (Maybe [Val Text])
pUsers = lens _policyUsers (\s a -> s { _policyUsers = a })