14 |
15 | // Anyone can browse group, if it is public
16 | Visitor.shouldBeAbleTo(BrowseGroup.action).when {
17 | guard let browseAction = $1 as? BrowseGroup else { return false }
18 | return browseAction.group.isPublicGroup
19 | }
20 |
21 | // Member can browse his groups + public groups
22 | GroupMemberUser.shouldBeAbleTo(BrowseGroup.action).when {
23 | guard let groupMember = $0 as? GroupMember,
24 | let browseAction = $1 as? BrowseGroup else { return false }
25 | return groupMember.groupNumber == browseAction.group.groupNumber
26 | }
27 |
28 | // Member can post his groups
29 | GroupMemberUser.shouldBeAbleTo(PostToGroup.action).when {
30 | guard let groupMember = $0 as? GroupMember,
31 | let postAction = $1 as? PostToGroup else { return false }
32 | return groupMember.groupNumber == postAction.group.groupNumber
33 | }
34 |
35 | // Admin class extends Member + ability to delete
36 | GroupAdminUser.shouldBeAbleTo(DeleteGroup.action).when {
37 | guard let groupAdmin = $0 as? GroupAdmin,
38 | let deleteAction = $1 as? DeleteGroup else { return false }
39 | return groupAdmin.groupNumber == deleteAction.group.groupNumber
40 | }
41 |
42 | // SuperAdmin can do everything
43 | _ = SuperAdminUser.shouldBeAbleTo(BrowseGroup.action)
44 | _ = SuperAdminUser.shouldBeAbleTo(DeleteGroup.action)
45 | _ = SuperAdminUser.shouldBeAbleTo(PostToGroup.action)
46 |
47 |