source: Klonkt/src/services/PermissionsService.js@ 743bb81

main
Last change on this file since 743bb81 was 7bc636b, checked in by Robin <robin@…>, 4 months ago

Initial commit — PrutFolio v1 source (pulled from Hetzner /srv/prutfolio)

  • Property mode set to 100644
File size: 2.9 KB
Line 
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;
46 if (user.id === site.owner_id) return true; // Site owner
47 if (this.canAdminSite(user, site)) return true;
48 return false;
49 }
50
51 /**
52 * Check if user can admin a site
53 */
54 static canAdminSite(user, site) {
55 if (!user) return false;
56 if (user.role === 'god') return true;
57 if (user.id === site.owner_id) return true;
58 // Check site_members table
59 return user.siteRoles && user.siteRoles[site.id] === 'admin';
60 }
61
62 /**
63 * Check if user can comment on a post
64 */
65 static canComment(user, site, post) {
66 if (!user && site.require_login_to_comment) return false;
67 if (!user) return true; // Anonymous allowed if not required
68 return true; // Logged-in users can always comment
69 }
70
71 /**
72 * Check if user can delete a comment
73 */
74 static canDeleteComment(user, comment, site) {
75 if (!user) return false;
76 if (user.role === 'god') return true;
77 if (user.id === comment.author_id) return true;
78 if (this.canAdminSite(user, site)) return true;
79 return false;
80 }
81
82 /**
83 * Check if user can send DMs
84 */
85 static canSendDM(user) {
86 return user !== null; // Only logged-in users
87 }
88
89 /**
90 * Check if user can configure site settings
91 */
92 static canConfigureSite(user, site) {
93 if (!user) return false;
94 if (user.role === 'god') return true;
95 if (user.id === site.owner_id) return true;
96 return false;
97 }
98
99 /**
100 * Check if user can manage users for a site
101 */
102 static canManageUsers(user, site) {
103 if (!user) return false;
104 if (user.role === 'god') return true;
105 if (user.id === site.owner_id) return true;
106 return false;
107 }
108}
109
110export default PermissionsService;
Note: See TracBrowser for help on using the repository browser.