mirror of
https://github.com/metosin/reitit.git
synced 2025-12-20 09:31:11 +00:00
Polish
This commit is contained in:
parent
7cd4c62216
commit
0de9e1b3c6
1 changed files with 29 additions and 32 deletions
|
|
@ -122,38 +122,35 @@
|
|||
respond (partial reset! result), raise ::not-called]
|
||||
(app {:uri "/api/users" :request-method :post} respond raise)
|
||||
(is (= {:status 200, :body [:api :users :post :ok :post :users :api]}
|
||||
@result))))))
|
||||
@result)))))))
|
||||
|
||||
(testing "runtime extensions for meta-data"
|
||||
(let [enforce-roles (fn [handler]
|
||||
(fn [{:keys [::roles] :as request}]
|
||||
(let [required (some-> request
|
||||
(ring/get-match)
|
||||
:meta
|
||||
::roles)]
|
||||
(if (or (not (seq required))
|
||||
(set/intersection required roles))
|
||||
(handler request)
|
||||
{:status 403 :body "forbidden"}))))
|
||||
router (ring/router
|
||||
[["/api"
|
||||
["/ping" handler]
|
||||
["/admin" {::roles #{:admin}}
|
||||
["/ping" handler]]]]
|
||||
{:meta {:middleware [enforce-roles]}})
|
||||
app (ring/ring-handler router)]
|
||||
(defn wrap-enforce-roles [handler]
|
||||
(fn [{:keys [::roles] :as request}]
|
||||
(let [required (some-> request (ring/get-match) :meta ::roles)]
|
||||
(if (and (seq required) (not (set/intersection required roles)))
|
||||
{:status 403, :body "forbidden"}
|
||||
(handler request)))))
|
||||
(deftest enforcing-meta-data-rules-at-runtime-test
|
||||
(let [handler (constantly {:status 200, :body "ok"})
|
||||
app (ring/ring-handler
|
||||
(ring/router
|
||||
[["/api"
|
||||
["/ping" handler]
|
||||
["/admin" {::roles #{:admin}}
|
||||
["/ping" handler]]]]
|
||||
{:meta {:middleware [wrap-enforce-roles]}}))]
|
||||
|
||||
(testing "public handler"
|
||||
(is (= {:status 200, :body [:ok]}
|
||||
(app {:uri "/api/ping" :request-method :get}))))
|
||||
(testing "public handler"
|
||||
(is (= {:status 200, :body "ok"}
|
||||
(app {:uri "/api/ping" :request-method :get}))))
|
||||
|
||||
(testing "runtime-enforced handler"
|
||||
(testing "without needed roles"
|
||||
(is (= {:status 403 :body "forbidden"}
|
||||
(app {:uri "/api/admin/ping"
|
||||
:request-method :get}))))
|
||||
(testing "with needed roles"
|
||||
(is (= {:status 200, :body [:ok]}
|
||||
(app {:uri "/api/admin/ping"
|
||||
:request-method :get
|
||||
::roles #{:admin}}))))))))
|
||||
(testing "runtime-enforced handler"
|
||||
(testing "without needed roles"
|
||||
(is (= {:status 403 :body "forbidden"}
|
||||
(app {:uri "/api/admin/ping"
|
||||
:request-method :get}))))
|
||||
(testing "with needed roles"
|
||||
(is (= {:status 200, :body "ok"}
|
||||
(app {:uri "/api/admin/ping"
|
||||
:request-method :get
|
||||
::roles #{:admin}})))))))
|
||||
|
|
|
|||
Loading…
Reference in a new issue