Completed
Pull Request — develop (#280)
by
unknown
11:38
created

ApplicationAccessAssertion::assert()   B

Complexity

Conditions 6
Paths 5

Size

Total Lines 20
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 20
rs 8.8571
cc 6
eloc 12
nc 5
nop 4
1
<?php
2
/**
3
 * YAWIK
4
 *
5
 * @filesource
6
 * @copyright (c) 2013 - 2016 Cross Solution (http://cross-solution.de)
7
 * @license   MIT
8
 */
9
10
/** */
11
namespace Applications\Acl;
12
13
use Zend\Permissions\Acl\Assertion\AssertionInterface;
14
use Zend\Permissions\Acl\Acl;
15
use Zend\Permissions\Acl\Resource\ResourceInterface;
16
use Zend\Permissions\Acl\Role\RoleInterface;
17
use Applications\Entity\ApplicationInterface;
18
use Auth\Entity\UserInterface;
19
use Core\Entity\PermissionsInterface;
20
21
/**
22
 * Checks permission on attachments
23
 *
24
 * @author Mathias Gelhausen <[email protected]>
25
 * @author Carsten Bleek <[email protected]>
26
 */
27
class ApplicationAccessAssertion implements AssertionInterface
28
{
29
    /**
30
     * Checks permissions based on resources' permissions.
31
     *
32
     * {@inheritDoc}
33
     *
34
     * @see \Zend\Permissions\Acl\Assertion\AssertionInterface::assert()
35
     */
36
    public function assert(
37
        Acl $acl,
38
        RoleInterface $role = null,
39
        ResourceInterface $resource = null,
40
        $privilege = null
41
    ) {
42
        if (!$role instanceof UserInterface || !$resource instanceof ApplicationInterface) {
43
            return false;
44
        }
45
        /* @var $resource ApplicationInterface */
46
        $permissions = $resource->getPermissions();
47
        
48
        if (ApplicationInterface::PERMISSION_SUBSEQUENT_ATTACHMENT_UPLOAD == $privilege) {
49
            // only applicant is allowed to upload subsequent attachments
50
            return $permissions->isAssigned($role) && $permissions->isGranted($role, PermissionsInterface::PERMISSION_VIEW);
51
        }
52
        
53
        $permission = 'read' == $privilege ? PermissionsInterface::PERMISSION_VIEW : PermissionsInterface::PERMISSION_CHANGE;
54
        return $permissions->isGranted($role, $permission);
55
    }
56
}
57