Commit | Line | Data |
---|---|---|
58202aac S |
1 | <?php |
2 | namespace dns\system; | |
3 | use dns\system\cache\builder\AclCacheBuilder; | |
4 | use dns\system\cache\builder\DomainCacheBuilder; | |
5 | use dns\system\cache\builder\UserCacheBuilder; | |
58202aac | 6 | use Zend\Permissions\Acl\Resource\GenericResource as Resource; |
bde15b3c S |
7 | use Zend\Permissions\Acl\Role\GenericRole as Role; |
8 | use Zend\Permissions\Acl\Acl; | |
58202aac S |
9 | |
10 | /** | |
11 | * @author Jan Altensen (Stricted) | |
12 | * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> | |
13 | * @copyright 2013-2016 Jan Altensen (Stricted) | |
14 | */ | |
15 | class AclHandler extends SingletonFactory { | |
16 | protected $acl = null; | |
17 | ||
18 | protected function init () { | |
19 | $this->acl = new Acl(); | |
20 | ||
21 | $users = UserCacheBuilder::getInstance()->getData(); | |
22 | $domains = DomainCacheBuilder::getInstance()->getData(); | |
23 | $permissions = AclCacheBuilder::getInstance()->getData(); | |
24 | ||
25 | /* add users */ | |
26 | foreach ($users as $user) { | |
27 | $this->acl->addRole((string)$user['userID']); | |
28 | } | |
29 | ||
30 | /* add domains */ | |
31 | foreach ($domains as $domain) { | |
32 | $this->acl->addResource((string)$domain['id']); | |
33 | } | |
34 | ||
35 | /* ass assignments */ | |
36 | foreach ($permissions as $permission) { | |
37 | var_dump($permission); | |
38 | $this->acl->allow((string)$permission['userID'], (string)$permission['soaID']); | |
39 | } | |
40 | ||
41 | var_dump($this->acl->getRole(1)); | |
42 | exit; | |
43 | } | |
44 | ||
45 | protected function resetCache () { | |
46 | AclCacheBuilder::getInstance()->reset(); | |
47 | DomainCacheBuilder::getInstance()->reset(); | |
48 | UserCacheBuilder::getInstance()->reset(); | |
49 | } | |
50 | ||
51 | public function canAccess ($soaID, $userID = null) { | |
52 | if ($userID === null) $userID = DNS::getSession()->userID; | |
53 | return $this->acl->isAllowed((string)$soaID, (string)$userID); | |
54 | } | |
55 | ||
56 | public function addPermission ($soaID, $userID = null) { | |
57 | if ($userID === null) $userID = DNS::getSession()->userID; | |
58 | ||
59 | $sql = "INSERT INTO dns_soa_to_user (id, userID, soaID) VALUES (null, ?, ?)"; | |
60 | DNS::getDB()->query($sql, array($userID, $soaID)); | |
61 | ||
62 | $this->acl->allow((string)$userID, (string)$soaID); | |
63 | $this->resetCache(); | |
64 | } | |
65 | ||
66 | public function delPermission ($soaID, $userID = null) { | |
67 | if ($userID === null) $userID = DNS::getSession()->userID; | |
68 | ||
69 | $sql = "DELETE FROM dns_soa_to_user WHERE userID = ? AND soaID = ?"; | |
70 | DNS::getDB()->query($sql, array($userID, $soaID)); | |
71 | ||
72 | $this->acl->removeAllow((string)$userID, (string)$soaID); | |
73 | $this->resetCache(); | |
74 | } | |
75 | ||
76 | public function getUsersForDomain ($soaID) { | |
77 | $users = []; | |
78 | $permissions = AclCacheBuilder::getInstance()->getData(); | |
79 | ||
80 | foreach ($permissions as $permission) { | |
81 | if ($permission['soaID'] == $soaID) { | |
82 | $users[] = $permission['userID'] | |
83 | } | |
84 | else { | |
85 | continue; | |
86 | } | |
87 | } | |
88 | ||
89 | return $users; | |
90 | } | |
91 | ||
92 | public function getDomainsForUser ($userID) { | |
93 | $domains = []; | |
94 | $permissions = AclCacheBuilder::getInstance()->getData(); | |
95 | ||
96 | foreach ($permissions as $permission) { | |
97 | if ($permission['userID'] == $userID) { | |
98 | $domains[] = $permission['soaID'] | |
99 | } | |
100 | else { | |
101 | continue; | |
102 | } | |
103 | } | |
104 | ||
105 | return $domains; | |
106 | } | |
107 | } |