Skip to content

Commit 3f3440e

Browse files
committed
Identity -> SimpleIdentity
Identity class must exist as an alias in order to read it from session
1 parent da84c3f commit 3f3440e

5 files changed

Lines changed: 149 additions & 186 deletions

File tree

src/Security/Identity.php

Lines changed: 0 additions & 127 deletions
This file was deleted.

src/Security/SimpleIdentity.php

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,114 @@
1212

1313
/**
1414
* Default implementation of IIdentity.
15+
* @property string|int $id
16+
* @property string[] $roles
17+
* @property array<string, mixed> $data
1518
*/
16-
class SimpleIdentity extends Identity
19+
class SimpleIdentity implements IIdentity
1720
{
21+
private string|int $id;
22+
23+
/** @var string[] */
24+
private array $roles;
25+
26+
/** @var array<string, mixed> */
27+
private array $data;
28+
29+
30+
/**
31+
* @param string|string[]|null $roles
32+
* @param ?iterable<string, mixed> $data
33+
*/
34+
public function __construct(string|int $id, string|array|null $roles = null, ?iterable $data = null)
35+
{
36+
$this->setId($id);
37+
$this->setRoles((array) $roles);
38+
$this->data = iterator_to_array($data ?? []);
39+
}
40+
41+
42+
/**
43+
* Sets the ID of user.
44+
*/
45+
public function setId(string|int $id): static
46+
{
47+
$this->id = is_numeric($id) && !is_float($tmp = $id * 1) ? $tmp : $id;
48+
return $this;
49+
}
50+
51+
52+
/**
53+
* Returns the ID of user.
54+
*/
55+
public function getId(): string|int
56+
{
57+
return $this->id;
58+
}
59+
60+
61+
/**
62+
* Sets a list of roles that the user is a member of.
63+
* @param string[] $roles
64+
*/
65+
public function setRoles(array $roles): static
66+
{
67+
$this->roles = $roles;
68+
return $this;
69+
}
70+
71+
72+
/**
73+
* Returns a list of roles that the user is a member of.
74+
* @return string[]
75+
*/
76+
public function getRoles(): array
77+
{
78+
return $this->roles;
79+
}
80+
81+
82+
/**
83+
* Returns a user data.
84+
* @return array<string, mixed>
85+
*/
86+
public function getData(): array
87+
{
88+
return $this->data;
89+
}
90+
91+
92+
/**
93+
* Sets user data value.
94+
*/
95+
public function __set(string $key, mixed $value): void
96+
{
97+
match ($key) {
98+
'id' => $this->setId($value),
99+
'roles' => $this->setRoles($value),
100+
'data' => $this->data = $value,
101+
default => $this->data[$key] = $value,
102+
};
103+
}
104+
105+
106+
/**
107+
* Returns user data value.
108+
*/
109+
public function &__get(string $key): mixed
110+
{
111+
if (in_array($key, ['id', 'roles', 'data'], strict: true)) {
112+
$res = $this->{'get' . ucfirst($key)}();
113+
return $res;
114+
115+
} else {
116+
return $this->data[$key];
117+
}
118+
}
119+
120+
121+
public function __isset(string $key): bool
122+
{
123+
return isset($this->data[$key]) || in_array($key, ['id', 'roles', 'data'], strict: true);
124+
}
18125
}

src/compatibility-intf.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
/**
4+
* This file is part of the Nette Framework (https://nette.org)
5+
* Copyright (c) 2004 David Grudl (https://davidgrudl.com)
6+
*/
7+
8+
declare(strict_types=1);
9+
10+
namespace Nette\Security;
11+
12+
if (false) {
13+
/** @deprecated use Nette\Security\Authorizator */
14+
interface IAuthorizator extends Authorizator
15+
{
16+
}
17+
} elseif (!interface_exists(IAuthorizator::class)) {
18+
class_alias(Authorizator::class, IAuthorizator::class);
19+
}
20+
21+
if (false) {
22+
/** @deprecated use Nette\Security\Resource */
23+
interface IResource extends Resource
24+
{
25+
}
26+
} elseif (!interface_exists(IResource::class)) {
27+
class_alias(Resource::class, IResource::class);
28+
}
29+
30+
if (false) {
31+
/** @deprecated use Nette\Security\Role */
32+
interface IRole extends Role
33+
{
34+
}
35+
} elseif (!interface_exists(IRole::class)) {
36+
class_alias(Role::class, IRole::class);
37+
}

src/compatibility.php

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,10 @@
1010
namespace Nette\Security;
1111

1212
if (false) {
13-
/** @deprecated use Nette\Security\Authorizator */
14-
interface IAuthorizator extends Authorizator
13+
/** @deprecated use Nette\Security\SimpleIdentity */
14+
class Identity extends SimpleIdentity
1515
{
1616
}
17-
} elseif (!interface_exists(IAuthorizator::class)) {
18-
class_alias(Authorizator::class, IAuthorizator::class);
19-
}
20-
21-
if (false) {
22-
/** @deprecated use Nette\Security\Resource */
23-
interface IResource extends Resource
24-
{
25-
}
26-
} elseif (!interface_exists(IResource::class)) {
27-
class_alias(Resource::class, IResource::class);
28-
}
29-
30-
if (false) {
31-
/** @deprecated use Nette\Security\Role */
32-
interface IRole extends Role
33-
{
34-
}
35-
} elseif (!interface_exists(IRole::class)) {
36-
class_alias(Role::class, IRole::class);
17+
} elseif (!class_exists(Identity::class)) {
18+
class_alias(SimpleIdentity::class, Identity::class);
3719
}

tests/Security/Identity.phpt

Lines changed: 0 additions & 36 deletions
This file was deleted.

0 commit comments

Comments
 (0)