Subject   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 0
dl 0
loc 78
ccs 14
cts 14
cp 1
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getId() 0 4 1
A getType() 0 4 1
A __construct() 0 5 1
A __toString() 0 4 1
A principal() 0 4 1
A role() 0 4 1
1
<?php
2
declare(strict_types=1);
3
/**
4
 * Caridea
5
 *
6
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
7
 * use this file except in compliance with the License. You may obtain a copy of
8
 * the License at
9
 *
10
 * http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing, software
13
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15
 * License for the specific language governing permissions and limitations under
16
 * the License.
17
 *
18
 * @copyright 2015-2018 LibreWorks contributors
19
 * @license   Apache-2.0
20
 */
21
namespace Caridea\Acl;
22
23
/**
24
 * An authorization subject: usually either a role or a principal.
25
 *
26
 * @copyright 2015-2018 LibreWorks contributors
27
 * @license   Apache-2.0
28
 */
29
class Subject
30
{
31
    const PRINCIPAL = 'principal';
32
    const ROLE = 'role';
33
34
    /**
35
     * @var string The subject type
36
     */
37
    private $type;
38
    /**
39
     * @var string The subject identifier
40
     */
41
    private $id;
42
43
    /**
44
     * Creates a new BasicSubject.
45
     *
46
     * @param string $type The subject type (e.g. "role", "principal")
47
     * @param string $id The subject identifier
48
     */
49 2
    protected function __construct(string $type, string $id)
50
    {
51 2
        $this->type = $type;
52 2
        $this->id = $id;
53 2
    }
54
55
    /**
56
     * Gets the identifier of the subject, usually a unique key.
57
     *
58
     * @return string The subject identifier
59
     */
60 2
    public function getId(): string
61
    {
62 2
        return $this->id;
63
    }
64
65
    /**
66
     * Gets the type of the subject.
67
     *
68
     * @return string The subject type
69
     */
70 2
    public function getType(): string
71
    {
72 2
        return $this->type;
73
    }
74
75
    /**
76
     * Gets a string representation of this subject.
77
     *
78
     * @return string The string representation
79
     */
80 2
    public function __toString(): string
81
    {
82 2
        return "{$this->type}:{$this->id}";
83
    }
84
85
    /**
86
     * Gets a Subject for a principal (such as a username).
87
     *
88
     * @param string $id The subject identifier
89
     * @return Subject The subject created!
90
     */
91 1
    public static function principal(string $id): Subject
92
    {
93 1
        return new self(self::PRINCIPAL, $id);
94
    }
95
96
    /**
97
     * Gets a Subject for a role.
98
     *
99
     * @param string $id The subject identifier
100
     * @return Subject The subject created
101
     */
102 1
    public static function role(string $id): Subject
103
    {
104 1
        return new self(self::ROLE, $id);
105
    }
106
}
107