PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 1.2.31
Booking for Appointments and Events Calendar – Amelia v1.2.31
2.4.9 2.4.8 2.4.7 2.4.6 2.4.5 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 1 year ago
PermissionsService.php
181 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 public const READ_PERMISSIONS = 'read';
17 public const READ_OTHERS_PERMISSIONS = 'read_others';
18 public const WRITE_PERMISSIONS = 'write';
19 public const DELETE_PERMISSIONS = 'delete';
20 public const WRITE_STATUS_PERMISSIONS = 'write_status';
21 public const WRITE_TIME_PERMISSIONS = 'write_time';
22 public const WRITE_OTHERS_PERMISSIONS = 'write_others';
23
24 /**
25 * @var AbstractUser
26 */
27 private $currentUser;
28
29 /**
30 * @var PermissionsCheckerInterface
31 */
32 private $permissionsChecker;
33
34 /**
35 * PermissionsService constructor.
36 *
37 * @param Container $container
38 * @param PermissionsCheckerInterface $permissionsChecker
39 *
40 * @throws \Slim\Exception\ContainerValueNotFoundException
41 * @throws \InvalidArgumentException
42 * @throws \Interop\Container\Exception\ContainerException
43 */
44 public function __construct(Container $container, PermissionsCheckerInterface $permissionsChecker)
45 {
46 // Inject dependencies
47 if (!($permissionsChecker instanceof PermissionsCheckerInterface)) {
48 throw new \InvalidArgumentException('Permissions checker must implement PermissionsCheckerInterface!');
49 }
50 // Assign current user reference
51 $this->currentUser = $container->get('logged.in.user');
52 $this->permissionsChecker = $permissionsChecker;
53 }
54
55 /**
56 * @param $user
57 * @param $object
58 * @param $permission
59 *
60 * @return bool|mixed
61 */
62 public function userCan($user, $object, $permission)
63 {
64 if ($user instanceof Admin) {
65 return true;
66 }
67 return $this->permissionsChecker->checkPermissions($user, $object, $permission);
68 }
69
70 /**
71 * Checks if a given user (AbstractUser) can read a given entity
72 *
73 * @param AbstractUser $user
74 * @param $object
75 *
76 * @return bool
77 */
78 public function userCanRead(AbstractUser $user, $object)
79 {
80 return $this->userCan($user, $object, self::READ_PERMISSIONS);
81 }
82
83 /**
84 * Checks if a given user (AbstractUser) can write a given entity
85 *
86 * @param AbstractUser $user
87 * @param $object
88 *
89 * @return bool
90 */
91 public function userCanWrite(AbstractUser $user, $object)
92 {
93 return $this->userCan($user, $object, self::WRITE_PERMISSIONS);
94 }
95
96 /**
97 * Checks if a given user (AbstractUser) can delete a given entity
98 *
99 * @param AbstractUser $user
100 * @param $object
101 *
102 * @return bool
103 */
104 public function userCanDelete(AbstractUser $user, $object)
105 {
106 return $this->userCan($user, $object, self::DELETE_PERMISSIONS);
107 }
108
109 /**
110 * @param $object
111 *
112 * @return bool
113 */
114 public function currentUserCanRead($object)
115 {
116 return $this->userCan($this->currentUser, $object, self::READ_PERMISSIONS);
117 }
118
119 /**
120 * @param $object
121 *
122 * @return bool
123 */
124 public function currentUserCanReadOthers($object)
125 {
126 return $this->userCan($this->currentUser, $object, self::READ_OTHERS_PERMISSIONS);
127 }
128
129 /**
130 * @param $object
131 *
132 * @return bool
133 */
134 public function currentUserCanWrite($object)
135 {
136 return $this->userCan($this->currentUser, $object, self::WRITE_PERMISSIONS);
137 }
138
139 /**
140 * @param $object
141 *
142 * @return bool
143 */
144 public function currentUserCanWriteOthers($object)
145 {
146 return $this->userCan($this->currentUser, $object, self::WRITE_OTHERS_PERMISSIONS);
147 }
148
149 /**
150 * @param $object
151 *
152 * @return bool
153 */
154 public function currentUserCanWriteStatus($object)
155 {
156 return $this->userCan($this->currentUser, $object, self::WRITE_STATUS_PERMISSIONS);
157 }
158
159 /**
160 * @param $object
161 *
162 * @return bool
163 */
164 public function currentUserCanWriteTime($object)
165 {
166 return $this->userCan($this->currentUser, $object, self::WRITE_TIME_PERMISSIONS);
167 }
168
169 /**
170 * Checks if current user can delete an entity
171 *
172 * @param $object
173 *
174 * @return bool
175 */
176 public function currentUserCanDelete($object)
177 {
178 return $this->userCan($this->currentUser, $object, self::DELETE_PERMISSIONS);
179 }
180 }
181