Skip to content

Commit 361bf73

Browse files
committed
SecurityExtension: uses configuration Schema
1 parent 4c2149e commit 361bf73

File tree

2 files changed

+30
-15
lines changed

2 files changed

+30
-15
lines changed

composer.json

+3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
"nette/tester": "^2.0",
2525
"tracy/tracy": "^2.4"
2626
},
27+
"conflict": {
28+
"nette/di": "<3.0"
29+
},
2730
"autoload": {
2831
"classmap": ["src/"]
2932
},

src/Bridges/SecurityDI/SecurityExtension.php

+27-15
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,46 @@
1010
namespace Nette\Bridges\SecurityDI;
1111

1212
use Nette;
13+
use Nette\Schema\Expect;
1314

1415

1516
/**
1617
* Security extension for Nette DI.
1718
*/
1819
class SecurityExtension extends Nette\DI\CompilerExtension
1920
{
20-
public $defaults = [
21-
'debugger' => null,
22-
'users' => [], // of [user => password] or [user => ['password' => password, 'roles' => [role]]]
23-
'roles' => [], // of [role => parent(s)]
24-
'resources' => [], // of [resource => parent]
25-
];
26-
2721
/** @var bool */
2822
private $debugMode;
2923

3024

3125
public function __construct(bool $debugMode = false)
3226
{
33-
$this->defaults['debugger'] = interface_exists(\Tracy\IBarPanel::class);
3427
$this->debugMode = $debugMode;
3528
}
3629

3730

31+
public function getConfigSchema(): Nette\Schema\Schema
32+
{
33+
return Expect::structure([
34+
'debugger' => Expect::bool(interface_exists(\Tracy\IBarPanel::class)),
35+
'users' => Expect::arrayOf(
36+
Expect::enum(
37+
Expect::string(), // user => password
38+
Expect::structure([ // user => password + roles
39+
'password' => Expect::string(),
40+
'roles' => Expect::enum(Expect::string(), Expect::listOf('string')),
41+
])->castTo('array')
42+
)
43+
),
44+
'roles' => Expect::arrayOf('string'), // role => parent(s)
45+
'resources' => Expect::arrayOf('string'), // resource => parent
46+
]);
47+
}
48+
49+
3850
public function loadConfiguration()
3951
{
40-
$config = $this->validateConfig($this->defaults);
52+
$config = $this->config;
4153
$builder = $this->getContainerBuilder();
4254

4355
$builder->addDefinition($this->prefix('passwords'))
@@ -50,15 +62,15 @@ public function loadConfiguration()
5062
$user = $builder->addDefinition($this->prefix('user'))
5163
->setFactory(Nette\Security\User::class);
5264

53-
if ($this->debugMode && $config['debugger']) {
65+
if ($this->debugMode && $config->debugger) {
5466
$user->addSetup('@Tracy\Bar::addPanel', [
5567
new Nette\DI\Definitions\Statement(Nette\Bridges\SecurityTracy\UserPanel::class),
5668
]);
5769
}
5870

59-
if ($config['users']) {
71+
if ($config->users) {
6072
$usersList = $usersRoles = [];
61-
foreach ($config['users'] as $username => $data) {
73+
foreach ($config->users as $username => $data) {
6274
$data = is_array($data) ? $data : ['password' => $data];
6375
$this->validateConfig(['password' => null, 'roles' => null], $data, $this->prefix("security.users.$username"));
6476
$usersList[$username] = $data['password'];
@@ -74,15 +86,15 @@ public function loadConfiguration()
7486
}
7587
}
7688

77-
if ($config['roles'] || $config['resources']) {
89+
if ($config->roles || $config->resources) {
7890
$authorizator = $builder->addDefinition($this->prefix('authorizator'))
7991
->setType(Nette\Security\IAuthorizator::class)
8092
->setFactory(Nette\Security\Permission::class);
8193

82-
foreach ($config['roles'] as $role => $parents) {
94+
foreach ($config->roles as $role => $parents) {
8395
$authorizator->addSetup('addRole', [$role, $parents]);
8496
}
85-
foreach ($config['resources'] as $resource => $parents) {
97+
foreach ($config->resources as $resource => $parents) {
8698
$authorizator->addSetup('addResource', [$resource, $parents]);
8799
}
88100

0 commit comments

Comments
 (0)