source: Klonkt/src/services/PermissionsService.js@ 6a2abb1

main
Last change on this file since 6a2abb1 was 6224462, checked in by roboburr <roboburr@…>, 3 months ago

Hub: show bottom tab (Home/Search/Login) on the hub landing too

The bottom tab fell under bareChrome → disappeared on the hub-home (no nav
on mobile). Now shown everywhere except auth screens. canCreatePost hardened
against a null site (hub landing without a site context) so the tab does not
crash for logged-in members.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@…>

  • Property mode set to 100644
File size: 2.9 KB
RevLine 
[7bc636b]1/**
2 * PermissionsService — Inline permission checks
3 * Used in templates to show/hide edit buttons, delete buttons, etc.
4 */
5
6class PermissionsService {
7 /**
8 * Check if user can edit a post
9 */
10 static canEditPost(user, post, site) {
11 if (!user) return false;
12 if (user.role === 'god') return true; // Gods can edit anything
13 if (user.id === post.author_id) return true; // Authors can edit their own
14 if (this.canAdminSite(user, site)) return true; // Site admins can edit
15 return false;
16 }
17
18 /**
19 * Check if user can delete a post
20 */
21 static canDeletePost(user, post, site) {
22 if (!user) return false;
23 if (user.role === 'god') return true;
24 if (user.id === post.author_id) return true;
25 if (this.canAdminSite(user, site)) return true;
26 return false;
27 }
28
29 /**
30 * Check if user can publish a post
31 */
32 static canPublishPost(user, post, site) {
33 if (!user) return false;
34 if (user.role === 'god') return true;
35 if (user.id === post.author_id) return true;
36 if (this.canAdminSite(user, site)) return true;
37 return false;
38 }
39
40 /**
41 * Check if user can create a post on this site
42 */
43 static canCreatePost(user, site) {
44 if (!user) return false;
45 if (user.role === 'god') return true;
[6224462]46 if (!site) return false; // geen site-context (bv. hub-landing) -> niets te posten
[7bc636b]47 if (user.id === site.owner_id) return true; // Site owner
48 if (this.canAdminSite(user, site)) return true;
49 return false;
50 }
51
52 /**
53 * Check if user can admin a site
54 */
55 static canAdminSite(user, site) {
56 if (!user) return false;
57 if (user.role === 'god') return true;
58 if (user.id === site.owner_id) return true;
59 // Check site_members table
60 return user.siteRoles && user.siteRoles[site.id] === 'admin';
61 }
62
63 /**
64 * Check if user can comment on a post
65 */
66 static canComment(user, site, post) {
67 if (!user && site.require_login_to_comment) return false;
68 if (!user) return true; // Anonymous allowed if not required
69 return true; // Logged-in users can always comment
70 }
71
72 /**
73 * Check if user can delete a comment
74 */
75 static canDeleteComment(user, comment, site) {
76 if (!user) return false;
77 if (user.role === 'god') return true;
78 if (user.id === comment.author_id) return true;
79 if (this.canAdminSite(user, site)) return true;
80 return false;
81 }
82
83 /**
84 * Check if user can send DMs
85 */
86 static canSendDM(user) {
87 return user !== null; // Only logged-in users
88 }
89
90 /**
91 * Check if user can configure site settings
92 */
93 static canConfigureSite(user, site) {
94 if (!user) return false;
95 if (user.role === 'god') return true;
96 if (user.id === site.owner_id) return true;
97 return false;
98 }
99
100 /**
101 * Check if user can manage users for a site
102 */
103 static canManageUsers(user, site) {
104 if (!user) return false;
105 if (user.role === 'god') return true;
106 if (user.id === site.owner_id) return true;
107 return false;
108 }
109}
110
111export default PermissionsService;
Note: See TracBrowser for help on using the repository browser.