(ns monostate)
(def ^:private session-state
(atom {:user-id nil
:permissions #{}
:last-access nil}))
(defn start-session
"Starts a new user session with ID and permissions."
[user-id permissions]
(reset! session-state {:user-id user-id
:permissions permissions
:last-access (java.time.Instant/now)}))
(defn end-session
"Ends the session, resetting the state to default values."
[]
(reset! session-state {:user-id nil
:permissions #{}
:last-access nil}))
(defn update-last-access
"Updates the last access timestamp to the current time."
[]
(swap! session-state assoc :last-access (java.time.Instant/now)))
(defn get-session
"Retrieves the complete state of the current session."
[]
@session-state)
(defn has-permission?
"Checks if the user has a specific permission."
[permission]
(contains? (:permissions @session-state) permission))
(comment
(start-session "user-123" #{"read" "write"})
;; => {:user-id "user-123", :permissions #{"read" "write"}, :last-access <timestamp>}
(has-permission? "read") ;; => true
(has-permission? "delete") ;; => false
(update-last-access)
(get-session)
;; => {:user-id "user-123", :permissions #{"read" "write"}, :last-access <new-timestamp>}
(end-session)
;; => {:user-id nil, :permissions #{}, :last-access nil}
)
![Cover image for Clojure Is Awesome!!! [PART 4]](https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12jamolozgaxseegg5bu.jpg)
Tune in for AWS Security LIVE!
Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.
For further actions, you may consider blocking this person and/or reporting abuse
Top comments (0)