0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-08 08:09:14 -05:00

♻️ Clean up and refactors of viewer role

This commit is contained in:
Pablo Alba 2024-10-17 16:47:55 +02:00
parent 66530ca868
commit bd08e99080
11 changed files with 53 additions and 60 deletions

View file

@ -652,7 +652,7 @@
(mbus/pub! msgbus
:topic member-id
:message {:type :team-permissions-change
:message {:type :team-role-change
:subs-id member-id
:team-id team-id
:role role})
@ -711,7 +711,8 @@
(mbus/pub! msgbus
:topic member-id
:message {:type :removed-from-team
:message {:type :team-membership-change
:change :removed
:subs-id member-id
:team-id team-id
:team-name (:name team)})

View file

@ -7,4 +7,11 @@
(ns app.common.types.team)
(def valid-roles
#{:owner :admin :editor :viewer})
#{:owner :admin :editor :viewer})
(def permissions-for-role
{:viewer {:can-edit false :is-admin false :is-owner false}
:editor {:can-edit true :is-admin false :is-owner false}
:admin {:can-edit true :is-admin true :is-owner false}
:owner {:can-edit true :is-admin true :is-owner true}})

View file

@ -182,7 +182,7 @@
uchg (vec undo-changes)
rchg (vec redo-changes)
features (features/get-team-enabled-features state)
user-viewer? (not (get-in state [:workspace-file :permissions :can-edit]))]
user-viewer? (not (dm/get-in state [:workspace-file :permissions :can-edit]))]
;; Prevent commit changes by a viewer team member (it really should never happen)
(if user-viewer?

View file

@ -174,6 +174,14 @@
(rx/tap on-success)
(rx/catch on-error))))))
(defn- change-role-msg
[role]
(case role
:viewer (tr "dashboard.permissions-change.viewer")
:editor (tr "dashboard.permissions-change.editor")
:admin (tr "dashboard.permissions-change.admin")
:owner (tr "dashboard.permissions-change.owner")))
(defn change-team-permissions
[{:keys [team-id role workspace?]}]
@ -182,19 +190,7 @@
(ptk/reify ::change-team-permissions
ptk/WatchEvent
(watch [_ _ _]
(let [msg (case role
:viewer
(tr "dashboard.permissions-change.viewer")
:editor
(tr "dashboard.permissions-change.editor")
:admin
(tr "dashboard.permissions-change.admin")
:owner
(tr "dashboard.permissions-change.owner"))]
(rx/of (ntf/info msg))))
(rx/of (ntf/info (change-role-msg role))))
ptk/UpdateEvent
(update [_ state]
@ -203,37 +199,24 @@
[:teams team-id :permissions])]
(update-in state route
(fn [permissions]
(cond
(= role :viewer)
(assoc permissions :can-edit false :is-admin false :is-owner false)
(= role :editor)
(assoc permissions :can-edit true :is-admin false :is-owner false)
(= role :admin)
(assoc permissions :can-edit true :is-admin true :is-owner false)
(= role :owner)
(assoc permissions :can-edit true :is-admin true :is-owner true)
:else
permissions)))))))
(merge permissions (get tt/permissions-for-role role))))))))
(defn removed-from-team
[{:keys [team-id team-name]}]
(defn team-membership-change
[{:keys [team-id team-name change]}]
(dm/assert! (uuid? team-id))
(ptk/reify ::removed-from-team
(ptk/reify ::team-membership-change
ptk/WatchEvent
(watch [_ state _]
(let [msg (tr "dashboard.removed-from-team" team-name)]
(when (= :removed change)
(let [msg (tr "dashboard.removed-from-team" team-name)]
(rx/concat
(rx/of (rt/nav :dashboard-projects {:team-id (get-in state [:profile :default-team-id])}))
(->> (rx/of (ntf/info msg))
(rx/concat
(rx/of (rt/nav :dashboard-projects {:team-id (get-in state [:profile :default-team-id])}))
(->> (rx/of (ntf/info msg))
;; Delay so the navigation can finish
(rx/delay 250)))))))
(rx/delay 250))))))))

View file

@ -1223,7 +1223,7 @@
(defn- process-message
[{:keys [type] :as msg}]
(case type
:notification (dc/handle-notification msg)
:team-permissions-change (handle-change-team-permissions-dashboard msg)
:removed-from-team (dc/removed-from-team msg)
:notification (dc/handle-notification msg)
:team-role-change (handle-change-team-permissions-dashboard msg)
:team-membership-change (dc/team-membership-change msg)
nil))

View file

@ -121,16 +121,16 @@
(defn- process-message
[{:keys [type] :as msg}]
(case type
:join-file (handle-presence msg)
:leave-file (handle-presence msg)
:presence (handle-presence msg)
:disconnect (handle-presence msg)
:pointer-update (handle-pointer-update msg)
:file-change (handle-file-change msg)
:library-change (handle-library-change msg)
:notification (dc/handle-notification msg)
:team-permissions-change (handle-change-team-permissions (assoc msg :workspace? true))
:removed-from-team (dc/removed-from-team msg)
:join-file (handle-presence msg)
:leave-file (handle-presence msg)
:presence (handle-presence msg)
:disconnect (handle-presence msg)
:pointer-update (handle-pointer-update msg)
:file-change (handle-file-change msg)
:library-change (handle-library-change msg)
:notification (dc/handle-notification msg)
:team-role-change (handle-change-team-permissions (assoc msg :workspace? true))
:team-membership-change (dc/team-membership-change msg)
nil))
(defn- handle-pointer-send

View file

@ -45,7 +45,7 @@
(defn emit-when-no-readonly
[& events]
(let [file (deref refs/workspace-file)
user-viewer? (not (get-in file [:permissions :can-edit]))
user-viewer? (not (dm/get-in file [:permissions :can-edit]))
read-only? (or (deref refs/workspace-read-only?)
user-viewer?)]
(when-not read-only?

View file

@ -7,6 +7,7 @@
(ns app.main.data.workspace.text.shortcuts
(:require
[app.common.data :as d]
[app.common.data.macros :as dm]
[app.common.text :as txt]
[app.main.data.shortcuts :as ds]
[app.main.data.workspace.texts :as dwt]
@ -190,7 +191,7 @@
(defn- update-attrs-when-no-readonly [props]
(let [undo-id (js/Symbol)
file (deref refs/workspace-file)
user-viewer? (not (get-in file [:permissions :can-edit]))
user-viewer? (not (dm/get-in file [:permissions :can-edit]))
read-only? (or (deref refs/workspace-read-only?)
user-viewer?)
shapes-with-children (deref refs/selected-shapes-with-children)

View file

@ -65,7 +65,7 @@
content-width (mf/use-state 0)
project-id (:id project)
team-id (:id team)
you-viewer? (not (get-in team [:permissions :can-edit]))
you-viewer? (not (dm/get-in team [:permissions :can-edit]))
dashboard-local (mf/deref refs/dashboard-local)
file-menu-open? (:menu-open dashboard-local)

View file

@ -7,6 +7,7 @@
(ns app.main.ui.dashboard.projects
(:require-macros [app.main.style :as stl])
(:require
[app.common.data.macros :as dm]
[app.common.geom.point :as gpt]
[app.main.data.dashboard :as dd]
[app.main.data.events :as ev]
@ -312,9 +313,9 @@
(sort-by :modified-at)
(reverse))
recent-map (mf/deref recent-files-ref)
you-owner? (get-in team [:permissions :is-owner])
you-admin? (get-in team [:permissions :is-admin])
you-viewer? (not (get-in team [:permissions :can-edit]))
you-owner? (dm/get-in team [:permissions :is-owner])
you-admin? (dm/get-in team [:permissions :is-admin])
you-viewer? (not (dm/get-in team [:permissions :can-edit]))
can-invite? (or you-owner? you-admin?)
show-team-hero* (mf/use-state #(get storage/global ::show-team-hero true))

View file

@ -172,7 +172,7 @@
team-id (:team-id project)
file-name (:name file)
user-viewer? (not (get-in file [:permissions :can-edit]))
user-viewer? (not (dm/get-in file [:permissions :can-edit]))
read-only? (or (mf/deref refs/workspace-read-only?)
user-viewer?)