@@ -145,14 +145,18 @@ func ReloadBuiltinRoles(opts *RoleOptions) {
145145Name :member ,
146146DisplayName :"" ,
147147Site :Permissions (map [string ][]Action {
148- // All users can read all other users and know they exist.
149- ResourceUser .Type : {ActionRead },
150148ResourceRoleAssignment .Type : {ActionRead },
151149// All users can see the provisioner daemons.
152150ResourceProvisionerDaemon .Type : {ActionRead },
153151}),
154- Org :map [string ][]Permission {},
155- User :allPermsExcept (ResourceWorkspaceLocked ),
152+ Org :map [string ][]Permission {},
153+ User :append (allPermsExcept (ResourceWorkspaceLocked ,ResourceUser ),
154+ Permissions (map [string ][]Action {
155+ // Users cannot do create/update/delete on themselves, but they
156+ // can read their own details.
157+ ResourceUser .Type : {ActionRead },
158+ })... ,
159+ ),
156160}.withCachedRegoValue ()
157161
158162auditorRole := Role {
@@ -163,6 +167,7 @@ func ReloadBuiltinRoles(opts *RoleOptions) {
163167// are not in.
164168ResourceTemplate .Type : {ActionRead },
165169ResourceAuditLog .Type : {ActionRead },
170+ ResourceUser .Type : {ActionRead },
166171}),
167172Org :map [string ][]Permission {},
168173User : []Permission {},
@@ -172,6 +177,7 @@ func ReloadBuiltinRoles(opts *RoleOptions) {
172177Name :templateAdmin ,
173178DisplayName :"Template Admin" ,
174179Site :Permissions (map [string ][]Action {
180+ ResourceUser .Type : {ActionRead },
175181ResourceTemplate .Type : {ActionCreate ,ActionRead ,ActionUpdate ,ActionDelete },
176182// CRUD all files, even those they did not upload.
177183ResourceFile .Type : {ActionCreate ,ActionRead ,ActionUpdate ,ActionDelete },