PhalconPHP和ACL:来宾能够访问受限制的内容

IFightCode

我不想允许来宾电话/新来的电话他们应该只能使用电话/索引和其他功能。但是访客可以访问Phones控制器的所有操作我需要您的帮助,以找出我犯的错误。

这是ACL插件

<?php

use Phalcon\Acl;
use Phalcon\Acl\Role;
use Phalcon\Acl\Resource;
use Phalcon\Events\Event;
use Phalcon\Mvc\User\Plugin;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Acl\Adapter\Memory as AclList;

/**
 * SecurityPlugin
 *
 * This is the security plugin which controls that users only have access to the modules they're assigned to
 */
class SecurityPlugin extends Plugin
{

    /**
     * Returns an existing or new access control list
     *
     * @returns AclList
     */
    public function getAcl()
    {


        if (!isset($this->persistent->acl)) {

            $acl = new AclList();

            $acl->setDefaultAction(Acl::DENY);

            //Register roles
            $roles = array(
                'admin' => new Role('Admin'),
                'editor' => new Role('Editor'),
                'guests' => new Role('Guests')
            );

            foreach ($roles as $role) {
                $acl->addRole($role);
            }

            //Admin area resources
            $adminResources = array(
                'dashboard' => array('index'),
                'phones' => array('index', 'all', 'new', 'edit', 'save', 'create', 'delete', 'search'),
                'users' => array('index', 'search', 'new', 'edit', 'save', 'create', 'delete', 'saveProfile', 'profile'),
            );

            foreach ($adminResources as $resource => $actions) {
                $acl->addResource(new Resource($resource), $actions);
            }

            //Editor area resources
            $editorResources = array(
                'dashboard' => array('index'),
                'phones' => array('index', 'all', 'new', 'edit', 'save', 'create', 'search'),
                'users' => array('saveProfile', 'profile'),
            );

            foreach ($editorResources as $resource => $actions) {
                $acl->addResource(new Resource($resource), $actions);
            }


            //Public area resources
            $publicResources = array(
                'index' => array('index'),
                'about' => array('index'),
                'login' => array('index', 'check', 'logout'),
                'errors' => array('show404', 'show500'),
                'contact' => array('index', 'send'),
                'phones' => array('index', 'search'),
            );
            foreach ($publicResources as $resource => $actions) {
                $acl->addResource(new Resource($resource), $actions);
            }

            //Grant access to public areas to both users and guests
            foreach ($roles as $role) {
                foreach ($publicResources as $resource => $actions) {
                    $acl->allow($role->getName(), $resource, '*');
                }
            }

            //Grant access to private area to role Admin
            foreach ($adminResources as $resource => $actions) {
                foreach ($actions as $action) {
                    $acl->allow('Admin', $resource, $action);
                }
            }

            //Grant access to private area to role Admin
            foreach ($editorResources as $resource => $actions) {
                foreach ($actions as $action) {
                    $acl->allow('Editor', $resource, $action);
                }
            }

            //The acl is stored in session, APC would be useful here too
            $this->persistent->acl = $acl;
        }

        return $this->persistent->acl;
    }

    /*
     * This action is executed before execute any action in the application
     *
     * @param Event $event
     * @param Dispatcher $dispatcher
     */
    public function beforeDispatch(Event $event, Dispatcher $dispatcher)
    {

        $auth = $this->session->get('auth');

        if (!$auth) {
            $role = 'Guests';
        } else {
            switch ($auth['role']) {
                case 1:
                    $role = "Admin";
                    break;
                case 2:
                    $role = "Editor";
                    break;
                default:
                    $role = "Guests";
                    break;
            }
        }

        $controller = $dispatcher->getControllerName();
        $action = $dispatcher->getActionName();

        $acl = $this->getAcl();

        $allowed = $acl->isAllowed($role, $controller, $action);
        if ($allowed != Acl::ALLOW) {
            $dispatcher->forward(array(
                'controller' => 'errors',
                'action' => 'show401'
            ));
            return false;
        }
    }
}
IFightCode

我通过将通配符更改为特定操作来解决此问题。我实际上从invo复制了代码,却忽略了这一点。

//Grant access to public areas to both users and guests
foreach ($roles as $role) {
    foreach ($publicResources as $resource => $actions) {
        $acl->allow($role->getName(), $resource, $actions);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实施Quicksort以对列表进行排序(对列表内容的访问权限受限制/无法访问)

来自分类Dev

实施Quicksort以对列表进行排序(对列表内容的访问权限受限制/无法访问)

来自分类Dev

iOS扩展和受限制的API

来自分类Dev

Ada访问静态地址的不受限制的类型

来自分类Dev

Spring Boot ldap组和受限制的端点

来自分类Dev

通过SSH的远程命令和受限制的Shell

来自分类Dev

活动不受限制

来自分类Dev

在PHP中检索WLAN SSID名称以显示受限制的内容

来自分类Dev

“此应用程序不受限制。它可以访问所有个人文件和系统资源。” - 这是什么意思?

来自分类Dev

如何访问iOS7不受限制的能源/网络记录?

来自分类Dev

Vtiger Web服务“对不起!尝试访问受限制的文件”响应

来自分类Dev

使用AngularJS进行动态指令加载-错误:拒绝访问受限制的URI

来自分类Dev

14.04上受限制的互联网访问。Teamviewer正常运行,网站无法加载

来自分类Dev

使用XMLHttpRequest时,如何处理JavaScript中的“拒绝访问受限制的URI”错误?

来自分类Dev

尝试使用ng-template时出现“拒绝访问受限制的URI”错误

来自分类Dev

如果您在Safari中打开链接,是否需要添加“不受限制的Web访问”?

来自分类Dev

阵列类型不受限制-VHDL

来自分类Dev

Android YouTubePlayer受限制的视频

来自分类Dev

阵列类型不受限制-VHDL

来自分类Dev

Jboss Jndi名称不受限制

来自分类Dev

PayumBundle:帐户受限制-10002

来自分类Dev

闪存中的文档大小受限制

来自分类Dev

家长控制但不受限制

来自分类Dev

Azure DocumentDB受限制的请求

来自分类Dev

http加载的对象不受限制

来自分类Dev

OpenLayers受限范围在缩放时不受限制

来自分类Dev

如何在不完全限制ssh访问的情况下拥有受限制的ssh用户?

来自分类Dev

iTunes Connect应用程序提交过程查询中的不受限制的Web访问选项

来自分类Dev

iTunes Connect应用程序提交过程查询中的不受限制的Web访问选项

Related 相关文章

  1. 1

    实施Quicksort以对列表进行排序(对列表内容的访问权限受限制/无法访问)

  2. 2

    实施Quicksort以对列表进行排序(对列表内容的访问权限受限制/无法访问)

  3. 3

    iOS扩展和受限制的API

  4. 4

    Ada访问静态地址的不受限制的类型

  5. 5

    Spring Boot ldap组和受限制的端点

  6. 6

    通过SSH的远程命令和受限制的Shell

  7. 7

    活动不受限制

  8. 8

    在PHP中检索WLAN SSID名称以显示受限制的内容

  9. 9

    “此应用程序不受限制。它可以访问所有个人文件和系统资源。” - 这是什么意思?

  10. 10

    如何访问iOS7不受限制的能源/网络记录?

  11. 11

    Vtiger Web服务“对不起!尝试访问受限制的文件”响应

  12. 12

    使用AngularJS进行动态指令加载-错误:拒绝访问受限制的URI

  13. 13

    14.04上受限制的互联网访问。Teamviewer正常运行,网站无法加载

  14. 14

    使用XMLHttpRequest时,如何处理JavaScript中的“拒绝访问受限制的URI”错误?

  15. 15

    尝试使用ng-template时出现“拒绝访问受限制的URI”错误

  16. 16

    如果您在Safari中打开链接,是否需要添加“不受限制的Web访问”?

  17. 17

    阵列类型不受限制-VHDL

  18. 18

    Android YouTubePlayer受限制的视频

  19. 19

    阵列类型不受限制-VHDL

  20. 20

    Jboss Jndi名称不受限制

  21. 21

    PayumBundle:帐户受限制-10002

  22. 22

    闪存中的文档大小受限制

  23. 23

    家长控制但不受限制

  24. 24

    Azure DocumentDB受限制的请求

  25. 25

    http加载的对象不受限制

  26. 26

    OpenLayers受限范围在缩放时不受限制

  27. 27

    如何在不完全限制ssh访问的情况下拥有受限制的ssh用户?

  28. 28

    iTunes Connect应用程序提交过程查询中的不受限制的Web访问选项

  29. 29

    iTunes Connect应用程序提交过程查询中的不受限制的Web访问选项

热门标签

归档