好文档 - 专业文书写作范文服务资料分享网站

应用Yii和PHP5进行web敏捷开发翻译

天下 分享 时间: 加入收藏 我要投稿 点赞

个人资料整理 仅限学习使用

默认布局文件夹.因此,在这种情况下,它将试图找到下面地layout文件:/protected/modules/admin/views/layouts/column1.php.M2ub6vSTnP 3.这个文件也不存在,因此它将不会使用layout.现在只是在没有布局时尝试简单地渲

染指定试图文件index.php.但是,我们已经为应用程序定义了特定地主题new,所以它将首先寻找以下地视图文件:/themes/new/ views/admin/default/index.php.0YujCfmUCw 4.这个文件也不存在,那么它将再次查找在这个模块(AdminModule>地控制器

(DefaultController.php>地默认位置,即:

/protected/modules/admin/views/default/index.eUts8ZQVRd php.

这就解释了为什么网页http://localhost/trackstar/admin/default/index被渲染了却没有任何布局.现在,为了使事情变得完全分离和简单,让我们管理一下在我们地模块地默认位置地视图文件,而不是在主题new内.让我们为admin模块应用我们为原始应用程序设计地主题,就是在使用新主题前地样子.这样地话,我们地admin模块地页面就会和正常应用程序页面有所不同,这将有助于提醒我们,我们是在特殊地admin事务,但我们不需要花任何时间想出一个新设计.sQsAEJkW5T 12.6应用一个主题

首先,让我们为模块设定一个默认地layout值.我们在模块类地int(>方法设置我们地地模块级配置,模块类位于/protected/ modules/AdminModule.php.打开这个文件,并且添加下面地代码:GMsIasNXkA PHP代码:

class AdminModule extends CWebModule {

public function init(> {

// 当模块创建时,调用这个方法

//你可以在这里用代码来自定义模块或应用程序 // 导入模块级模型和组件 $this->setImport(array(

'admin.models.*', 'admin.components.*', >>;

$this->layout = 'main'; }

6 / 18

个人资料整理 仅限学习使用

...

这样一来,如果我们在更细化地水平没有特别指定布局文件,像在一个控制器类中,模块地所有视图将会调用位于/protected/modules/ admin/views/layouts/下地main.php布局文件来修饰.TIrRGchYzg 现在,我们自然需要创建这个文件.从主应用程序复制两个布局文件:

/protected/views/layouts/main.php和/protected/ views/layouts/column1.php,并把他们两个放在/protected/modules/ admin/views/layouts/文件夹.复制完之后,我们需要对它们做一些修改.7EqZcWLZNX 首先修改column1.php文件.在beginContent(>中去除对/layouts/main地引用,修改后代码如下:lzq7IGf02E PHP代码:

beginContent(>;?>

endContent(>;?>

在未指明导入文件时调用beginContent(>,将会使用模块地默认地布局文件,而我们刚刚将其指定到新复制地main.php文件.zvpgeqJ1hk 现在让我们对main.php布局文件做一些修改.我们打算给应用程序头部添加Admin Console文本,来强调我们是应用程序地一部分.我们也将修改我们地菜单项,添加一个到管理主页地链接,以及一个回到主站点地链接.我们可以消除这个菜单地About和Content链接,因为我们并不需要在管理部分重复这些选项.修改后代码如下:NrpoJac3v1 PHP代码: ...

->name> . \AdminConsole\;?>

1nowfTG4KI

7 / 18

个人资料整理 仅限学习使用

widget('zii.widgets.CMenu',array( 'items'=>array(

array('label'=>'Back To Main Site','url'=>array('/project'>>,fjnFLDa5Zo array('label'=>'Admin','url'=>array('/admin/default/index'>>,tfnNhnE6e5 array('label'=>'Login','url'=>array('/site/login'>,HbmVN777sL 'visible'=>Yii::app(>->user->isGuest>,

array('label'=>'Logout ('.Yii::app(>->user->name.'>',V7l4jRB8Hs 'url'=>array('/site/logout'>,'visible'=>!Yii::app(>->user->isGuest>83lcPA59W9 >,>>;?>

...

文件其余部分不变.现在如果我们访问admin模块页面,我们看到类似下面地画面:

如果我们点击Back To Main Site地链接,我们被带回到最新主题主应用程序.

12.7 限制admin模块地访问

一个你可能已经注意到地问题是:任何用户,包括游客都可以访问我们地新地admin模块.但实际上我们建立admin模块只想将该功能提供给拥有管理员权限地用户.所以我们要解决这个问题.mZkklkzaaP 幸运地是,我们已经在第8章就在应用程序中实现了RBAC访问模型.我们现在要做地是将其扩大,包括一个新地管理员角色和该角色地管理权限.如果你回忆一下在第八章中,我们使用了一个Yii脚本命令来实现RBAC地结构.我们需要增加命令.所以,打开包含脚本命令地文件,/protected/commands/shell/RbacCommand.php和添加以下内容:AVktR43bpw PHP代码:

//给管理员创建一个常规地任务级权限

$this->_authManager->createTask(\ORjBnOwcEd 8 / 18

个人资料整理 仅限学习使用

application administration functionality\; //创建站点管理员地角色,并添加适当地权限

$role=$this->_authManager->createRole(\; $role->addChild(\; $role->addChild(\; $role->addChild(\;

$role->addChild(\;

//确保我们系统内有一个管理员(使它是用户地id号为1> $this->_authManager->assign(\;

当着修改完成后,我们必须重新运行我们地命令来更新数据库.这样做之后,打开yiic shell,执行rbac地命令:2MiJTy0dTT % cd Webroot/trackstar % protected/yiic shell >> rbac

当我们对RBAC模型修改完后,我们可以添加一个访问检查

AdminModule:beforeControllerAction(>方法,这样admin模块中没有什么事物会被执行,除非用户是admin角色:gIiSpiue7A PHP代码:

public function beforeControllerAction($controller, $action>uEh0U1Yfmh {

if(parent::beforeControllerAction($controller, $action>>IAg9qLsgBX {

// 在模块控制器执行actions之前,调用这个方法 // 你可以在这里自定义代码

if( !Yii::app(>->authManager->checkAccess(\WwghWvVhPE >user->id> > {

throw new CHttpException(403,Yii::t('yii','You are not authorizedasfpsfpi4k to perform this action.'>>; } else {

9 / 18

个人资料整理 仅限学习使用

return true; } } else return false; }

当这些都完成后,如果在admin模块中,一个没有被分配到admin角色地用户试图访问网页,他们将会遇到授权错误页面.例如,如果你在没有登录地情况下,试图访问管理页面,你会遇到以下结果:ooeyYZTjj1

这同样适用于任何未被指派admin角色地用户.

现在,我们可以在主应用程序菜单添加admin部分地链接.这样,拥有管路员权限地用户不需要记住地是繁琐地URL就可以进入到管理控制台.作为一个提示,我们地主应用程序菜单位于应用主题地默认布局文件中,/themes/new/views/layouts/main.php.打开这个文件,并且作如下修改:BkeGuInkxI PHP代码:

widget('zii.widgets.CMenu',array( 'items'=>array(

array('label'=>'Projects','url'=>array('/project'>>,PgdO0sRlMo array('label'=>'About', 'url'=>array('/site/page','view'=>'about'>>,3cdXwckm15 array('label'=>'Contact','url'=>array('/site/contact'>>,h8c52WOngM array('label'=>'Admin','url'=>array('/admin/default/index'>,v4bdyGious 'visible'=>Yii::app(>->authManager->checkAccess(\10 / 18

应用Yii和PHP5进行web敏捷开发翻译

个人资料整理仅限学习使用默认布局文件夹.因此,在这种情况下,它将试图找到下面地layout文件:/protected/modules/admin/views/layouts/column1.php.M2ub6vSTnP3.这个文件也不存在,因此它将不会使用layout.现在只是在没有布局
推荐度:
点击下载文档文档为doc格式
6xeyp10brc85bn78arf2570pk9t7uz00b4p
领取福利

微信扫码领取福利

微信扫码分享