1

これが私のbjyauthorize.global.phpコンテンツです

<?php

return array(
'bjyauthorize' => array(

    // set the 'guest' role as default (must be defined in a role provider)
    // 'default_role' => 'guest',

    /* this module uses a meta-role that inherits from any roles that should
     * be applied to the active user. the identity provider tells us which
     * roles the "identity role" should inherit from.
     *
     * for ZfcUser, this will be your default identity provider
     */
    'identity_provider' => 'BjyAuthorize\Provider\Identity\ZfcUserZendDb',

    /* If you only have a default role and an authenticated role, you can
     * use the 'AuthenticationIdentityProvider' to allow/restrict access
     * with the guards based on the state 'logged in' and 'not logged in'.
     */
      // 'default_role'       => 'guest',         // not authenticated
      // 'authenticated_role' => 'user',          // authenticated
      // 'identity_provider'  => 'BjyAuthorize\Provider\Identity\AuthenticationIdentityProvider',


    /* role providers simply provide a list of roles that should be inserted
     * into the Zend\Acl instance. the module comes with two providers, one
     * to specify roles in a config file and one to load roles using a
     * Zend\Db adapter.
     */
    'role_providers' => array(

        /* here, 'guest' and 'user are defined as top-level roles, with
         * 'admin' inheriting from user
         */
        'BjyAuthorize\Provider\Role\Config' => array(
            'admin' => array(),
            'guest' => array()
        ),

        // this will load roles from the user_role table in a database
        // format: user_role(role_id(varchar), parent(varchar))
        'BjyAuthorize\Provider\Role\ZendDb' => array(
            'table'             => 'user_role',
            'role_id_field'     => 'roleId',
            'parent_role_field' => 'parent_id',
        ),

        // this will load roles from the 'BjyAuthorize\Provider\Role\Doctrine'
        // service
        // 'BjyAuthorize\Provider\Role\Doctrine' => array(),
    ),

    // resource providers provide a list of resources that will be tracked
    // in the ACL. like roles, they can be hierarchical
    'resource_providers' => array(
        // 'BjyAuthorize\Provider\Resource\Config' => array(
        //     'pants' => array(),
        // ),

        'BjyAuthorize\Provider\Resource\Config' => array(
            'Collections\Controller\CollectionsController' => array('admin'),
        ),
    ),

    /* rules can be specified here with the format:
     * array(roles (array), resource, [privilege (array|string), assertion])
     * assertions will be loaded using the service manager and must implement
     * Zend\Acl\Assertion\AssertionInterface.
     * *if you use assertions, define them using the service manager!*
     */
    'rule_providers' => array(
        'BjyAuthorize\Provider\Rule\Config' => array(
            'allow' => array(
                // allow guests and users (and admins, through inheritance)
                // the "wear" privilege on the resource "pants"
                // array(array('guest', 'user'), 'pants', 'wear')
                array(array('admin'), 'Collections\Controller\CollectionsController', 'index')
            ),

            // Don't mix allow/deny rules if you are using role inheritance.
            // There are some weird bugs.
            'deny' => array(
                // ...
                 // array(array('admin', 'guest'), 'collections', 'add')
            ),
        ),
    ),

    /* Currently, only controller and route guards exist
     *
     * Consider enabling either the controller or the route guard depending on your needs.
     */
    'guards' => array(
        /* If this guard is specified here (i.e. it is enabled), it will block
         * access to all controllers and actions unless they are specified here.
         * You may omit the 'action' index to allow access to the entire controller
         */
        'BjyAuthorize\Guard\Controller' => array(
            array('controller' => 'index', 'action' => 'index', 'roles' => array('admin','guest')),
            array('controller' => 'index', 'action' => 'stuff', 'roles' => array('admin')),
            array('controller' => 'Collections\Controller\CollectionsController', 'roles' => array('admin', 'guest')),

            // You can also specify an array of actions or an array of controllers (or both)
            // allow "guest" and "admin" to access actions "list" and "manage" on these "index",
            // "static" and "console" controllers
            // array(
            //     'controller' => array('index', 'static', 'console'),
            //     'action' => array('list', 'manage'),
            //     'roles' => array('guest', 'admin')
            // ),
            array('controller' => 'zfcuser', 'roles' => array('admin', 'guest')),
            // Below is the default index action used by the ZendSkeletonApplication
            array('controller' => 'Application\Controller\Index', 'roles' => array('guest', 'admin')),
        ),

        /* If this guard is specified here (i.e. it is enabled), it will block
         * access to all routes unless they are specified here.
         */
        'BjyAuthorize\Guard\Route' => array(
            array('route' => 'zfcuser', 'roles' => array('admin', 'guest')),
            array('route' => 'zfcuser/logout', 'roles' => array('admin', 'guest')),
            array('route' => 'zfcuser/login', 'roles' => array('admin', 'guest')),
            array('route' => 'zfcuser/register', 'roles' => array('guest', 'admin')),
            // Below is the default index action used by    the ZendSkeletonApplicationarray('route' => 'zfcuser/register', 'roles' => array('guest', 'admin')),
            array('route' => 'collections/index', 'roles' => array('guest', 'admin')),
            array('route' => 'home', 'roles' => array('guest', 'admin')),
        ),
    ),
),
);

次のようなデータベース構造があります。

--
-- Table structure for table `user`
--

CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`display_name` varchar(50) DEFAULT NULL,
`password` varchar(128) NOT NULL,
`state` smallint(5) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

--
-- Dumping data for table `user`
--

INSERT INTO `user` (`id`, `username`, `email`, `display_name`, `password`, `state`) VALUES
(1, NULL, 'test@test.com', NULL, '$2y$14$fL.K0rieXO.kHsHfOogH8Oaf..C.1GsYqEB49A3Dmxy9ZiMhWHx7.', NULL);

-- --------------------------------------------------------

--
-- Table structure for table `user_role`
--

CREATE TABLE IF NOT EXISTS `user_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`roleId` varchar(255) NOT NULL,
`is_default` tinyint(1) NOT NULL,
`parent_id` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `user_role`
--

INSERT INTO `user_role` (`id`, `roleId`, `is_default`, `parent_id`) VALUES
(1, 'admin', 1, 'admin'),
(2, 'guest', 1, 'admin');

-- --------------------------------------------------------

-- 
-- Table structure for table `user_role_linker`
--

CREATE TABLE IF NOT EXISTS `user_role_linker` (
`user_id` int(11) unsigned NOT NULL,
`role_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`,`role_id`),
KEY `role_id` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `user_role_linker`
--

INSERT INTO `user_role_linker` (`user_id`, `role_id`) VALUES
(1, 1);

この問題に従って、ユーザー テーブルの列を変更しました。また、user_idのZfcUserのMapper を id に変更しました。エラー表示がないので正常に動作しています。

エラーはありませんが、ログイン前にログインページ (zfcuser/login) を除いて、アクセスしたモジュール (/user および /collections) に対して常に「403 Forbidden」が表示されます。

user_role_linker テーブルのデータのデータベースに疑問があります。BjyAuth ライブラリの user_role テーブルにロール データを入力するための適切なドキュメントが見つかりませんでした。設定ファイルやデータベーステーブル、またはここで言及されていないその他の設定に誤りがないか教えてください。

4

2 に答える 2

1

user_role_linkerテーブルの問題、フィールドrole_idvarcharむしろint. 同じ問題がありました。サンプル データについては、次のダンプを確認してください。

CREATE TABLE IF NOT EXISTS `user_role_linker` (
`user_id` int(11) unsigned NOT NULL,
`role_id` varchar(128) NOT NULL,
 PRIMARY KEY (`user_id`,`role_id`),
 KEY `role_id` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
--   Dumping data for table `user_role_linker`
--

INSERT INTO `user_role_linker` (`user_id`, `role_id`) VALUES(1, 'admin'); 
于 2014-09-16T09:12:00.580 に答える
0

基礎が正しくセットアップされているかどうかを知らずに、やりすぎている可能性があります。完全な答えではありませんが、次のことをお勧めします。

  • Zend Framework Developer Tools ( https://github.com/zendframework/ZendDeveloperTools ) をインストールして実行すると、ページの下部にツールバーが表示され、現在の役割がわかります。他の多くのものにも役立ちます。ログイン時に適切な役割を持っていると仮定すると、一度に 1 つのガードのみをセットアップします。すなわち。現在、「BjyAuthorize\Guard\Controller」と「BjyAuthorize\Guard\Route」の両方が設定されています

  • これらのいずれかを実行して開始し、一方が実行されたら、もう一方をテストできます。bjyauthorize.global.php の適切なセクションを削除するかコメントアウトするだけです。

ガードを有効にすると、指定されていないものはすべてブロックされるという動作に注意してください。

コントローラーとルートを見ないと、上記の構成の一部が正しいかどうかわかりませんが、ルート名を再確認して、完全修飾されたコントローラー名を使用する方が安全かもしれません。それ以外の

array('controller' => 'index',

試す

array('controller' => 'YourModuleName\Controller\IndexController',

これが助けになることを願っています。

さらに、ある時点で Doctrine ORM を使用することになった場合、https://github.com/manuakasam/SamUserは、BjyAuthorize、ZFcuser、および Doctrine を簡単に結び付ける優れたモジュールです。

フィン

于 2013-08-19T23:22:17.643 に答える