PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 1.2.11
Booking for Appointments and Events Calendar – Amelia v1.2.11
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / src / Domain / Services / Permissions / PermissionsService.php
ameliabooking / src / Domain / Services / Permissions Last commit date
PermissionsCheckerInterface.php 7 years ago PermissionsService.php 7 years ago
PermissionsService.php
182 lines
1 <?php
2
3 namespace AmeliaBooking\Domain\Services\Permissions;
4
5 use AmeliaBooking\Domain\Entity\User\AbstractUser;
6 use AmeliaBooking\Domain\Entity\User\Admin;
7 use AmeliaBooking\Infrastructure\Common\Container;
8
9 /**
10 * Class PermissionsService
11 *
12 * @package AmeliaBooking\Domain\Services\Permissions
13 */
14 class PermissionsService
15 {
16
17 const READ_PERMISSIONS = 'read';
18 const READ_OTHERS_PERMISSIONS = 'read_others';
19 const WRITE_PERMISSIONS = 'write';
20 const DELETE_PERMISSIONS = 'delete';
21 const WRITE_STATUS_PERMISSIONS = 'write_status';
22 const WRITE_TIME_PERMISSIONS = 'write_time';
23 const WRITE_OTHERS_PERMISSIONS = 'write_others';
24
25 /**
26 * @var AbstractUser
27 */
28 private $currentUser;
29
30 /**
31 * @var PermissionsCheckerInterface
32 */
33 private $permissionsChecker;
34
35 /**
36 * PermissionsService constructor.
37 *
38 * @param Container $container
39 * @param PermissionsCheckerInterface $permissionsChecker
40 *
41 * @throws \Slim\Exception\ContainerValueNotFoundException
42 * @throws \InvalidArgumentException
43 * @throws \Interop\Container\Exception\ContainerException
44 */
45 public function __construct(Container $container, PermissionsCheckerInterface $permissionsChecker)
46 {
47 // Inject dependencies
48 if (!($permissionsChecker instanceof PermissionsCheckerInterface)) {
49 throw new \InvalidArgumentException('Permissions checker must implement PermissionsCheckerInterface!');
50 }
51 // Assign current user reference
52 $this->currentUser = $container->get('logged.in.user');
53 $this->permissionsChecker = $permissionsChecker;
54 }
55
56 /**
57 * @param $user
58 * @param $object
59 * @param $permission
60 *
61 * @return bool|mixed
62 */
63 public function userCan($user, $object, $permission)
64 {
65 if ($user instanceof Admin) {
66 return true;
67 }
68 return $this->permissionsChecker->checkPermissions($user, $object, $permission);
69 }
70
71 /**
72 * Checks if a given user (AbstractUser) can read a given entity
73 *
74 * @param AbstractUser $user
75 * @param $object
76 *
77 * @return bool
78 */
79 public function userCanRead(AbstractUser $user, $object)
80 {
81 return $this->userCan($user, $object, self::READ_PERMISSIONS);
82 }
83
84 /**
85 * Checks if a given user (AbstractUser) can write a given entity
86 *
87 * @param AbstractUser $user
88 * @param $object
89 *
90 * @return bool
91 */
92 public function userCanWrite(AbstractUser $user, $object)
93 {
94 return $this->userCan($user, $object, self::WRITE_PERMISSIONS);
95 }
96
97 /**
98 * Checks if a given user (AbstractUser) can delete a given entity
99 *
100 * @param AbstractUser $user
101 * @param $object
102 *
103 * @return bool
104 */
105 public function userCanDelete(AbstractUser $user, $object)
106 {
107 return $this->userCan($user, $object, self::DELETE_PERMISSIONS);
108 }
109
110 /**
111 * @param $object
112 *
113 * @return bool
114 */
115 public function currentUserCanRead($object)
116 {
117 return $this->userCan($this->currentUser, $object, self::READ_PERMISSIONS);
118 }
119
120 /**
121 * @param $object
122 *
123 * @return bool
124 */
125 public function currentUserCanReadOthers($object)
126 {
127 return $this->userCan($this->currentUser, $object, self::READ_OTHERS_PERMISSIONS);
128 }
129
130 /**
131 * @param $object
132 *
133 * @return bool
134 */
135 public function currentUserCanWrite($object)
136 {
137 return $this->userCan($this->currentUser, $object, self::WRITE_PERMISSIONS);
138 }
139
140 /**
141 * @param $object
142 *
143 * @return bool
144 */
145 public function currentUserCanWriteOthers($object)
146 {
147 return $this->userCan($this->currentUser, $object, self::WRITE_OTHERS_PERMISSIONS);
148 }
149
150 /**
151 * @param $object
152 *
153 * @return bool
154 */
155 public function currentUserCanWriteStatus($object)
156 {
157 return $this->userCan($this->currentUser, $object, self::WRITE_STATUS_PERMISSIONS);
158 }
159
160 /**
161 * @param $object
162 *
163 * @return bool
164 */
165 public function currentUserCanWriteTime($object)
166 {
167 return $this->userCan($this->currentUser, $object, self::WRITE_TIME_PERMISSIONS);
168 }
169
170 /**
171 * Checks if current user can delete an entity
172 *
173 * @param $object
174 *
175 * @return bool
176 */
177 public function currentUserCanDelete($object)
178 {
179 return $this->userCan($this->currentUser, $object, self::DELETE_PERMISSIONS);
180 }
181 }
182