Test Failed
Push — master ( 02c765...419434 )
by Maximo
02:22
created

library/Middleware/AclMiddleware.php (1 issue)

1
<?php
0 ignored issues
show
End of line character is invalid; expected "\n" but found "\r\n"
Loading history...
2
3
declare(strict_types=1);
4
5
namespace Gewaer\Middleware;
6
7
use Phalcon\Mvc\Micro;
8
use Phalcon\Mvc\Micro\MiddlewareInterface;
9
use Gewaer\Exception\ServerErrorHttpException;
10
use Gewaer\Exception\PermissionException;
11
12
/**
13
 * Class AclMiddleware
14
 *
15
 * @package Gewaer\Middleware
16
 */
17
class AclMiddleware implements MiddlewareInterface
18
{
19
    /**
20
     * Call me
21
     *
22
     * @param Micro $api
23
     * @todo need to check section for auth here
24
     * @return bool
25
     */
26 2
    public function call(Micro $api)
27
    {
28 2
        $auth = $api->getService('auth');
29 2
        $router = $api->getService('router');
30 2
        $request = $api->getService('request');
31
32 2
        if (!$auth->isIgnoreUri()) {
33
            // explode() by / , postiion #1 is always the controller , so its the resource ^.^
34
            $matchRouter = explode('/', $router->getMatchedRoute()->getCompiledPattern());
35
            $resource = ucfirst($matchRouter[2]); //2 is alwasy the controller of the router
36
            $userData = $api->getService('userData');
37
38
            $action = null;
39
            // GET -> read
40
            // PUT -> update
41
            // DELETE -> delete
42
            // POST -> create
43
44
            switch (strtolower($request->getMethod())) {
45
                case 'get':
46
                    $action = 'read';
47
                break;
48
                case 'post':
49
                    $action = 'create';
50
                break;
51
                case 'delete':
52
                    $action = 'delete';
53
                break;
54
                case 'pute':
55
                    $action = 'update';
56
                break;
57
                default:
58
                    throw new ServerErrorHttpException('No Permission define for this action');
59
                break;
60
            }
61
62
            //do you have permision
63
            if (!$userData->can($resource . '.' . $action)) {
64
                throw new PermissionException('You dont have permission to run this action ' . $action . ' at ' . $resource);
65
                $api->stop();
66
                return false;
67
            }
68
        }
69
70 2
        return true;
71
    }
72
}
73