onunix 2012-06-04 15:08:06 7433次浏览 19条回复 0 0 0

出现如下异常:请问是哪个地方配得不对呢?CException 别名 "modules.srbac.components.SDbAuthManager" 是无效的. 请确定它指向一个已存在的目录或文件.

D:\skill\finance\Yii\protected\modules\srbac\SrbacModule.php(244)

232   public function getShowFooter() {
233     return $this->_showFooter;
234   }
235 
236 
237 
238   /**
239    * Checks if srbac is installed by checking if Auth items table exists.
240    * @return boolean Whether srbac is installed or not
241    */
242   public function isInstalled() {
243     try {
244       $tables = Yii::app()->authManager->db->schema->tableNames;
245       $itemTableName = Yii::app()->authManager->itemTable;
246       $itemChildTableName = Yii::app()->authManager->itemChildTable ;
247       $assignmentTableName  = Yii::app()->authManager->assignmentTable ;
248       $tablePrefix = AuthItem::model()->getDbConnection()->tablePrefix;
249       if(!is_null($tablePrefix)) {
250         $itemTableName = preg_replace('/{{(.*?)}}/',$tablePrefix.'\1',$itemTableName);
251         $itemChildTableName = preg_replace('/{{(.*?)}}/',$tablePrefix.'\1',$itemChildTableName);
252         $assignmentTableName = preg_replace('/{{(.*?)}}/',$tablePrefix.'\1',$assignmentTableName);
253       }
254       if(in_array($itemTableName, $tables) &&
255         in_array($itemChildTableName, $tables) &&
256         in_array($assignmentTableName, $tables)) {
[/code]我的配置文件:[code]<?php
//add by  
header("Content-type: text/html; charset=utf-8");
// uncomment the following to define a path alias
// Yii::setPathOfAlias('local','path/to/local-folder');

// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.
return array(
	'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
	'name'=>'My Web Application',
  //add by 
  'language'=>'zh_cn',
  'timeZone'=>'Asia/Shanghai',
  'charset'=>'UTF-8',

	// preloading 'log' component
	'preload'=>array('log'),

	// autoloading model and component classes
	'import'=>array(
		'application.models.*',
		'application.components.*',
		'application.modules.srbac.controllers.SBaseController',
	),

	'modules'=>array(
		// uncomment the following to enable the Gii tool
		
		'gii'=>array(
			'class'=>'system.gii.GiiModule',
			'password'=>'1234',
		 	// If removed, Gii defaults to localhost only. Edit carefully to taste.
			//'ipFilters'=>array('127.0.0.1','::1'),
		),
		
	

'srbac' => array(
'userclass'=>'User', //default: User
'userid'=>'user_ID', //default: userid
'username'=>'username', //default:username
'delimeter'=>'@', //default:-
'debug'=>true, //default :false
'pageSize'=>10, // default : 15
'superUser' =>'Authority', //default: Authorizer
'css'=>'srbac.css', //default: srbac.css
'layout'=>'application.views.layouts.main', //default: application.views.layouts.main,
//must be an existing alias
'notAuthorizedView'=> 'srbac.views.authitem.unauthorized', // default:
//srbac.views.authitem.unauthorized, must be an existing alias
'alwaysAllowed'=>array( //default: array()
'SiteLogin','SiteLogout','SiteIndex','SiteAdmin',
'SiteError', 'SiteContact'),
'userActions'=>array('Show','View','List'), //default: array()
'listBoxNumberOfLines' => 15, //default : 10 'imagesPath' => 'srbac.images', // default: srbac.images 'imagesPack'=>'noia', //default: noia 'iconText'=>true, // default : false 'header'=>'srbac.views.authitem.header', //default : srbac.views.authitem.header,
//must be an existing alias 'footer'=>'srbac.views.authitem.footer', //default: srbac.views.authitem.footer,
//must be an existing alias 'showHeader'=>true, // default: false 'showFooter'=>true, // default: false
'alwaysAllowedPath'=>'srbac.components', // default: srbac.components
// must be an existing alias )
),

		
		
	),

	// application components
	'components'=>array(
		'user'=>array(
			// enable cookie-based authentication
			'allowAutoLogin'=>true,
		),
		
		// uncomment the following to enable URLs in path-format
		/*
		'urlManager'=>array(
			'urlFormat'=>'path',
			'rules'=>array(
				'<controller:\w+>/<id:\d+>'=>'<controller>/view',
				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
			),
		),
		*/
		'db'=>array(
			'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
		),
		// uncomment the following to use a MySQL database
		
		'db'=>array(
			'connectionString' => 'mysql:host=localhost;dbname=test',
			'emulatePrepare' => true,
			'username' => 'root',
			'password' => 'a',
			'charset' => 'utf8',
		),
		
		'db'=>array(
'class'=>'CDbConnection',
'connectionString'=>'mysql:host=localhost;dbname=test',
'username'=>'root',
'password'=>'a',
),

//Configure AuthManager component
'authManager'=>array(
// Path to SDbAuthManager in srbac module if you want to use case insensitive
//access checking (or CDbAuthManager for case sensitive access checking)
'class'=>'modules.srbac.components.SDbAuthManager',
// The database component used
'connectionID'=>'db',
// The itemTable name (default:authitem)
'itemTable'=>'items',
// The assignmentTable name (default:authassignment)
'assignmentTable'=>'assignments',
// The itemChildTable name (default:authitemchild)
'itemChildTable'=>'itemchildren',
),

//Configure srbac module:


//'import'=>array(
//'application.modules.srbac.controllers.SBaseController',
//),


		'errorHandler'=>array(
			// use 'site/error' action to display errors
            'errorAction'=>'site/error',
        ),
		'log'=>array(
			'class'=>'CLogRouter',
			'routes'=>array(
				array(
					'class'=>'CFileLogRoute',
					'levels'=>'error, warning',
				),
				// uncomment the following to show log messages on web pages
				/*
				array(
					'class'=>'CWebLogRoute',
				),
				*/
			),
		),
	),
	


	// application-level parameters that can be accessed
	// using Yii::app()->params['paramName']
	'params'=>array(
		// this is used in contact page
		'adminEmail'=>'webmaster@example.com',
	),
);
  • 回复于 2012-06-04 15:36 举报

    这个问题,很明显是你指定的文件路径不对。你写的配置要跟你工程的文件对应,否则就会找不到文件,你的配置:

    'authManager'=>array(
    // Path to SDbAuthManager in srbac module if you want to use case insensitive
    //access checking (or CDbAuthManager for case sensitive access checking)
    'class'=>'modules.srbac.components.SDbAuthManager',     // 这里这个路径不能乱写,得跟你工程文件匹配
    // The database component used
    'connectionID'=>'db',
    

    你看下你工程中存在这个文件:modules/srbac/components/SDbAuthManager.php 么?

    Yii的components是根据类名反射查找的文件名,如果类名跟文件名不统一就会存在这个问题。

  • 回复于 2012-06-04 15:39 举报

    应该是srbac的配置文件有问题。

    'srbac' => array(
    'userclass'=>'User', //default: User
    'userid'=>'user_ID', //default: userid
    'username'=>'username', //default:username
    'delimeter'=>'@', //default:-
    'debug'=>true, //default :false
    'pageSize'=>10, // default : 15
    'superUser' =>'Authority', //default: Authorizer
    'css'=>'srbac.css', //default: srbac.css
    'layout'=>'application.views.layouts.main', //default: application.views.layouts.main,
    //must be an existing alias
    'notAuthorizedView'=> 'srbac.views.authitem.unauthorized', // default:
    //srbac.views.authitem.unauthorized, must be an existing alias
    'alwaysAllowed'=>array( //default: array()
    'SiteLogin','SiteLogout','SiteIndex','SiteAdmin',
    'SiteError', 'SiteContact'),
    'userActions'=>array('Show','View','List'), //default: array()
    'listBoxNumberOfLines' => 15, //default : 10 'imagesPath' => 'srbac.images', // default: srbac.images 'imagesPack'=>'noia', //default: noia 'iconText'=>true, // default : false 'header'=>'srbac.views.authitem.header', //default : srbac.views.authitem.header,
    //must be an existing alias 'footer'=>'srbac.views.authitem.footer', //default: srbac.views.authitem.footer,
    //must be an existing alias 'showHeader'=>true, // default: false 'showFooter'=>true, // default: false
    'alwaysAllowedPath'=>'srbac.components', // default: srbac.components
    // must be an existing alias )
    ),
    

    这些都对应对了吗?我看怎么还是默认的值呢?

  • 回复于 2012-06-04 15:40 举报

    还有就是srbac应该放到modules目录下,而不是model或components目录下

  • 回复于 2012-06-04 15:51 举报

    我检查了下,这个文件是在我的机器上有的,完整路径是 D:\skill\finance\Yii\protected\modules\srbac\components\SDbAuthManager.php,我是在protected下面建立了一个modules,然后把解压出来的东西放上去的,我原来想是否应该放到 protected\extensions下面建立 modules呢,后面觉得不对,还是应该在protected下面建,因此就在protected下面建立了一个modules目录

  • 回复于 2012-06-04 15:54 举报

    我是参照帮助文档做的,除了数据库的配置外,其他配置确实没有修改过,从 srbac_guide_1.3_beta.pdf上拷贝过来的,但是我想这些东西可以使用缺省的吧,哪个参数是必须要修改的吗?

  • 回复于 2012-06-04 15:55 举报

    我是放在modules目录下的啊 D:\skill\finance\Yii\protected\modules\srbac\.....

  • 回复于 2012-06-04 15:56 举报

    有User类吗?还有User表里是用user_ID这个作为主键吗?等等

  • 回复于 2012-06-04 16:02 举报

    'class'=>'modules.srbac.components.SDbAuthManager',
    这里要写全路径:application.modules.srbac.components.SDbAuthManager
    试下

  • 回复于 2012-06-04 16:06 举报

    是否跟配置的先后顺序有关?是不是应该先加载SDbAuthManager再配置?

  • 回复于 2012-06-04 16:23 举报

    因为我是通过 http://localhost/Yii/index.php?r=Test/admin 访问的,这个文件的路径 D:\skill\finance\Yii\protected\modules\srbac\SrbacModule.php,那全路径是否就是:'class'=>'Yii.protected.modules.srbac.components.SDbAuthManager', 改为这个也是相同的错误:别名 "Yii.protected.modules.srbac.components.SDbAuthManager" 是无效的. 请确定它指向一个已存在的目录或文件.

  • 回复于 2012-06-04 16:23 举报

    你的意思是如何修改呢?我不太明白。

  • 回复于 2012-06-04 16:25 举报

    不是的。。。。 全称就是application.modules.srbac.components.SDbAuthManager
    application 就是应用主目录的别名。所以不用改

  • 回复于 2012-06-04 16:28 举报

    可能我说全路径误导你了,这个也就类似于main.php 中的

    'import'=>array(
        'application.models.*',
        'application.components.*',
        'application.modules.srbac.controllers.SBaseController',
    ),
    application就是应用主目录的别名
    
  • 回复于 2012-06-04 16:31 举报

    直白一点就是改成 'class'=>'application.modules.srbac.components.SDbAuthManager',

  • 回复于 2012-06-04 16:48 举报

    谢谢,这样真的好了,进入了安装主页 http://localhost/Yii/index.php?r=srbac/authitem/install

    在这个界面上,提示
    srbac is not Configured*
    数据库中无法找到 active record class "User" 对应的 table "User".

    难道这个表还要手工创建?不能自动创建的么?怎么创建呢?

  • 回复于 2012-06-04 17:06 举报

    噢,你的用户表是什么呀?srbac默认的表是user表,

    'srbac' => array(
    'userclass'=>'User', //default: User
    ……
    

    在配制srbac的时候这里要改成你对应的用户表

  • 回复于 2012-06-04 17:41 举报

    现在我创建了一个User 表,都OK了,进入了授权界面,我把admin的角色都清掉,admin不属于任何角色,那应该就无法创建帖子了吧,但是 ,还是照样可以创建帖子,似乎srbac没有生效,我想,是否还得手工修改下控制器,在控制器中加入一句检验srbac中的权限的语句才行?

  • 回复于 2012-06-04 17:43 举报

    哦,我知道了,要修改debug设置

  • 回复于 2012-06-05 15:08 举报

    我测试了一下,就是这儿的问题:
    'class'=>'modules.srbac.components.SDbAuthManager',
    应该是:
    'class'=>'applications.modules.srbac.components.SDbAuthManager',

您需要登录后才可以回复。登录 | 立即注册