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