       [(format (str "Parameter identity_type has invalid values [%s]. "
                     "Only 'provider', 'system', 'single_instance', or 'catalog_item' can be specified.")
                (str/join ", " invalid-types))])))
+
+(defn boolean-value-validation
+  "Validates that all of the boolean parameters have values of true or false."
+  [concept-type params]
+  (let [bool-params (select-keys params [:include-full-acl])]
+    (mapcat
+      (fn [[param value]]
+        (when-not (contains? #{"true" "false"} (when value (str/lower-case value)))
+          [(format "Parameter %s must take value of true or false but was [%s]"
+                   (csk/->snake_case_string param) value)]))
+      bool-params)))
 
 (defn validate-acl-search-params
   "Validates the parameters for an ACL search. Returns the parameters or throws an error if invalid."

(def all-permissions
  "The set of all permissions checked and returned by the functions below."
  #{:read :order :update :delete})

(def provider-level-permissions
  "The set of permissions that are checked at the provider level."
  #{:update :delete})

(defn- collect-permissions
  "Returns seq of any permissions where (grants-permission? acl permission) returns true for any acl in acls."

   :provider :string
   :permitted-user :acl-permitted-user
   :group-permission :acl-group-permission})

(defmethod cp/parse-query-level-params :acl
  [concept-type params]
  (let [[params query-attribs] (cp/default-parse-query-level-params :acl params)
        result-features (when (= (:include-full-acl params) "true"
                                 [:include-full-acl]))]
    [(dissoc params :include-full-acl)
     (merge query-attribs
            (when (= (:include-full-acl params) "true")
              {:result-features [:include-full-acl]}))]))

(defmethod cp/parameter->condition :acl-identity-type
 [context concept-type param value options]
