- A lot of small important bugfixes

This commit is contained in:
Dave M. 2021-10-22 13:39:22 +00:00
parent f72115aab4
commit 8892edd19e
8 changed files with 90 additions and 8 deletions

View File

@ -0,0 +1,22 @@
<?php
use function DI\autowire, DI\create, DI\get;
use Storage\Session;
use Taxus\{ Privilege, Taxus, PermissionGrantInterface, DefaultPermissionGrant };
use Psr\Http\Message\ServerRequestInterface;
return [
Taxus::class => function ($c) {
return ( new Taxus( $c->get(PermissionGrantInterface::class) ) )->add(
[ new Privilege("dev", "Is a developper of this application."), "is_dev" ],
[ new Privilege("admin", "Can manage mostly everything from this application."), "is_admin" ],
[ new Privilege("user", "Is an authenticated user."), "is_user" ],
[ new Privilege("anonymous", "Is an anonymous (unauthenticated) user."), "is_anonymous" ],
);
},
PermissionGrantInterface::class => create(DefaultPermissionGrant::class)->constructor(get(ServerRequestInterface::class), get(Session::class)),
];

View File

@ -86,11 +86,11 @@ return [
JavascriptMiddleware::class => create(JavascriptMiddleware::class), JavascriptMiddleware::class => create(JavascriptMiddleware::class),
Cookie::class => create(Cookie::class)->constructor([ 'secure' => true, 'samesite' => 'Strict' ], getenv("LEAN_RANDOM")), Cookie::class => create(Cookie::class)->constructor([ 'secure' => true, 'path' => getenv('URL_BASE'), ], getenv("LEAN_RANDOM")),
Session::class => create(Session::class), Session::class => create(Session::class)->constructor(get(Cookie::class), [ 'path' => getenv('URL_BASE'), ]),
SessionMiddleware::class => create(SessionMiddleware::class)->constructor(get(Cookie::class), [ 'name' => "lean_sess_" . substr(md5(getenv("LEAN_RANDOM")), 0, 12) ]), SessionMiddleware::class => create(SessionMiddleware::class)->constructor(get(Cookie::class), [ 'path' => getenv('URL_BASE'), 'name' => "lean_sess_" . substr(md5(getenv("LEAN_RANDOM")), 0, 12) ]),
'git.commit' => function($c) { 'git.commit' => function($c) {
if ( getenv("DEBUG") ) { if ( getenv("DEBUG") ) {

View File

@ -17,6 +17,8 @@ use Picea\Picea;
use TheBugs\Email\{ EmailConfiguration, MailerInterface, SwiftMailer }; use TheBugs\Email\{ EmailConfiguration, MailerInterface, SwiftMailer };
use Taxus\Taxus;
return [ return [
Entity\User::class => autowire(Entity\User::class), Entity\User::class => autowire(Entity\User::class),
@ -24,7 +26,7 @@ return [
SecurityHandler::class => create(SecurityHandler::class)->constructor(function() { SecurityHandler::class => create(SecurityHandler::class)->constructor(function() {
return new RedirectResponse(getenv("URL_BASE")."/connexion"); return new RedirectResponse(getenv("URL_BASE")."/connexion");
}, get('authentication.unauthorize')), }, get('authentication.unauthorize'), get(Taxus::class)),
'authentication.error' => function($c, Picea $picea) { 'authentication.error' => function($c, Picea $picea) {
return function($message) use ($picea) { return function($message) use ($picea) {
@ -59,4 +61,6 @@ return [
return $email; return $email;
}, },
PermissionGrantInterface::class => create(%NAMESPACE%\PrivilegeGrantAccess::class)->constructor(get(ServerRequestInterface::class), get(Session::class)),
]; ];

View File

@ -5,7 +5,9 @@ use Psr\Container\ContainerInterface;
use Ulmus\ConnectionAdapter, use Ulmus\ConnectionAdapter,
Ulmus\Container\AdapterProxy; Ulmus\Container\AdapterProxy;
use LdapRecord\Connection; use Storage\Session;
use function DI\autowire, DI\create, DI\get;
return [ return [
ConnectionAdapter::class => function($c) { ConnectionAdapter::class => function($c) {
@ -21,5 +23,5 @@ return [
return new AdapterProxy( return new AdapterProxy(
$c->get(ConnectionAdapter::class) $c->get(ConnectionAdapter::class)
); );
} },
]; ];

View File

@ -7,7 +7,7 @@ use Ulmus\Entity\Field\Datetime;
use %NAMESPACE%\Lib; use %NAMESPACE%\Lib;
/** /**
* # Table('name' => "user") * @Table('name' => "user")
*/ */
class User extends \Ulmus\User\Entity\User implements \JsonSerializable class User extends \Ulmus\User\Entity\User implements \JsonSerializable
{ {

View File

@ -27,7 +27,7 @@ trait ControllerTrait {
$this->picea = $picea; $this->picea = $picea;
$this->authenticate = $authenticate; $this->authenticate = $authenticate;
$this->session = $session; $this->session = $session;
$this->user = $authenticate->rememberMe( Entity\User::repository() ) ?: new User(); $this->user = $authenticate->rememberMe( Entity\User::repository() ) ?: new Entity\User();
} }
} }

View File

@ -0,0 +1,53 @@
<?php
namespace %NAMESPACE%;
use Psr\Http\Message\ServerRequestInterface;
use Notes\Security\Annotation\Taxus;
use Storage\Session;
use Taxus\PermissionGrantInterface;
Use Ulmus\User\Entity\User;
class PrivilegeGrantAccess implements PermissionGrantInterface {
public Session $session;
public ServerRequestInterface $request;
public function __construct(ServerRequestInterface $request, Session $session)
{
$this->request = $request;
$this->session = $session;
}
/*
* --- Reles
*/
public function is_dev() : bool
{
return false;
}
public function is_admin(User $user) : bool
{
return ! $this->is_anonymous($user) && FALSE; # <<<<<<<<<<<<<----- ADJUST YOUR ADMIN PRIVILEGE HERE ACCORDINGLY
}
public function is_user(User $user) : bool
{
return ! $this->is_anonymous($user);
}
public function is_anonymous(User $user) : bool
{
return ! $user || ! $user->logged;
}
/*
* --- Verifications
*/
public function default($name) : bool
{
return false;
}
}

View File

@ -116,6 +116,7 @@ class Lean
require($path . "http.php"), require($path . "http.php"),
require($path . "language.php"), require($path . "language.php"),
require($path . "routes.php"), require($path . "routes.php"),
require($path . "security.php"),
require($path . "software.php"), require($path . "software.php"),
require($path . "template.php"), require($path . "template.php"),
); );