This can be done by advising hack-local-variables-filter
.
(defvar my-trusted-paths
(list
"/some/path/"
"/another/path/"))
(defvar my-trusted-paths-prefix
(list
"/another/prefix/"
"/some/prefix/"))
(defun my-trusted-paths-filter (dir-name)
(catch 'result
(dolist (p my-trusted-paths)
(when (string-equal p dir-name)
(throw 'result t)))
(dolist (p my-trusted-paths-prefix)
(when (string-prefix-p p dir-name)
(throw 'result t)))))
(advice-add 'hack-local-variables-filter
:around
#'
(lambda (old-fn &rest args)
(pcase-let ((`(,_variables ,dir-name) args))
(if (my-trusted-paths-filter dir-name)
(cl-letf (((symbol-function 'safe-local-variable-p) (lambda (&rest _) t)))
(apply old-fn args)
;; Always accept paths matching.
t)
(apply old-fn args)))))
NOTE: I've since moved to a package that is an alternative to dir-locals
that allows out-of-source locals called sidecar-locals.