书签 分享 收藏 举报 版权申诉 / 18

类型应用Yii11和PHP5进行敏捷Web开发第十二章迭代9添加管理模块.docx

  • 文档编号:6118125
  • 上传时间:2023-01-03
  • 格式:DOCX
  • 页数:18
  • 大小:833.22KB

--content-->

php$this->endContent();?

>

在没有指定的情况下调用beginContent(),将会使用模块默认的layout文件,而我们刚刚将其指定到新copy过来的main.php。

现在是时候修改main.php文件了。

我们需要应用程序头部添加AdminConsole文字,来提示这是应用程序的管理部分。

我们也需要对菜单项进行修改,来添加指向管理首页的连接,同时也要添加返回主站点的连接。

我们可以去除About和Contact连接,因为在管理部分不需要重复这些资料。

修改后代码如下:

PHP代码:

...

phpechoCHtml:

:

encode(Yii:

:

app()->name)."Ad-minConsole";?

>

--header-->

php$this->widget('zii.widgets.CMenu',array(

'items'=>array(

array('label'=>'BackToMainSite','url'=>array('/proj-ect')),

array('label'=>'Admin','url'=>array('/admin/default/in-dex')),

array('label'=>'Login','url'=>array('/site/login'),'visible'=>Yii:

:

app()->user->isGuest),

array('label'=>'Logout('.Yii:

:

app()->user->name.')','url'=>array('/site/logout'),

'visible'=>!

Yii:

:

app()->user->isGuest)),

));?

>

--mainmenu-->

...

其他的部分无需修改。

现在访问admin的模块页面,你会看到如下的画面:

如果我们点击BackToMainSite的连接,我们将被带回新主题的主应用程序。

限制对admin模块的访问

你可能会发现一个问题,所有用户,包括游客都可以访问该模块。

但实际上我们建立admin模块只想将该功能提供给拥有管理员权限的用户。

所以我们需要解决这一问题。

幸运的是,我们在第8章时已经完成了RBAC访问模型。

那么我们只需要是指包含一个新管理员角色和对该角色的新访问许可。

如果你还记得,第8章时我们使用了Yii脚本命令来实现RBAC结构的。

我们需要继续这样来添加。

因此,打开包含脚本命令的文件,/protected/commands/shell/RbacCommand.php并且添加如下内容:

PHP代码:

//createageneraltask-levelpermissionforadmins$this->_authManager->createTask("adminManagement","accesstotheapplicationadministrationfunctionality");

//createthesiteadminrole,andaddtheappropriatepermissions

$role=$this->_authManager->createRole("admin");

$role->addChild("owner";$role->addChild("reader");

$role->addChild("member");

$role->addChild("adminManagement");

//ensurewehaveoneadmininthesystem(forceittobeuserid#1)$this->_authManager->assign("admin",1);

当都修改完以后,我们需要通过命令行来更新数据库。

打开yiicshell,执行rbac命令:

SHELL代码或屏幕回显:

%cdWebroot/trackstar

%protected/yiicshell

>>rbac

当我们对RBAC模型的修改完成之后,我们可以添加访问检查到AdminModule:

:

beforeControllerAction()方法,因此只有admin角色才可以访问admin模块:

PHP代码:

publicfunctionbeforeControllerAction($controller,$action)

{

if(parent:

:

beforeControllerAction($controller,$action))

{

//thismethodiscalledbeforeanymodulecontrolleractionisperformed

//youmayplacecustomizedcodehere

if(!

Yii:

:

app()->authManager->checkAccess("admin",Yii:

:

app()->user->id))

{

thrownewCHttpException(403,Yii:

:

t('yii','Youarenotau-thorizedtoperformthisaction.'));

}

else{

returntrue;

}

}

else

returnfalse;

}

这些都完成后,如果一个没有admin角色的用户试图访问,将会看到授权错误页面。

例如,如果在未登录状态或你试图访问admin页面,你将看到如下结果:

每个用户都将遇到这个问题,因为并没有指派admin角色给任何用户。

现在我们可以在主应用程序菜单中添加到admin部分的连接了。

这样,拥有管理权限的用户可以到达管理页面。

作为一个提示,我们主应用程序的菜单位于对应主题的默认layout中,/themes/new/views/layouts/main.php。

打开该文件,然后做如下修改:

PHP代码:

php$this->widget('zii.widgets.CMenu',array(

'items'=>array(

array('label'=>'Projects','url'=>array('/project')),

array('label'=>'About','url'=>array('/site/page','view'=>'about')),

array('label'=>'Contact','url'=>array('/site/contact')),

array('label'=>'Admin','url'=>array('/admin/default/index'),

'visible'=>Yii:

:

app()->authManager->checkAccess("admin",Yii:

:

app()->user->id)),

array('label'=>'Login','url'=>array('/site/login'),

'visible'=>Yii:

:

app()->user->isGuest),

array('label'=>'Logout('.Yii:

:

app()->user->name.')','url'=>array('/site/logout'),

'visible'=>!

Yii:

:

app()->user->isGuest)),

));?

>

--mainmenu-->

现在,使用admin权限登录应用程序,我们在顶部导航中将看到一个新连接,它会帮我们转到admin部分。

添加系统级信息

因为一个模块可以被认为一个小型应用程序,为模块添加功能和之前为主应用添加功能时相似的。

让我们为管理员添加一些功能:

当用户第一次登录到应用程序时向用户显示系统级信息。

建立数据库中的表

与平时扩展新功能一样,我们需要一个地方存储数据。

我们需要新建一张表来存储我们系统级信息。

因为我们一向追求简单。

下面是数据表的定义语句:

SQL代码:

CREATETABLE`tbl_sys_message`

`id`INTEGERNOTNULLPRIMARYKEYAUTO_INCREMENT,

`message`TEXTNOTNULL,

`create_time`DATETIME,

`create_user_id`INTEGER,

`update_time`DATETIME,

`update_user_id`INTEGER

请在trackstar_dev和trackstar_test两个数据库中建立该表。

建立模型和CRUD脚手架

当表建立好以后,下一步就是使用Gii代码生成器来建立模型类了。

我们将首先使用ModelGenerator来新建模型类,然后使用CrudGenerator来完成对应脚手架操作。

继续导航至Gii工具表单来添加一个新模型。

这一次,我们在对一个模块的内容进行操作,我们需要指明模型的路径(这里应该是说基于模块的模型,先有模块后有模型)。

按下图所示填充表单(当然,此处你的CodeTemplate路径值将略有不同):

现在我们将使用相同的方式建立CRUD脚手架。

在次指出,与以前唯一的不同就是这里需要指明所属模块为admin。

在选择CrudGenerator选项后,按下图填写ModelClass和ControllerID:

这样就会告诉开发工具,我们的模型类是在admin模块下的,包括控制器类在内的其他相关文件也需要被生成在admin模块内。

通过点击Preview按钮后点击Generate按钮完成文件创建。

下图是所有被创建的文件列表:

添加到新功能的连接

让我们在admin部分主导航菜单中添加导航至我们新添加消息功能的连接。

打开当前模块包含导航内容的文件,/protected/modules/admin/views/layouts/main.php,并且在menu部件中添加下面的数组:

PHP代码:

array('label'=>'SystemMessages','url'=>array('/admin/sysMessage/index')),

为消息功能自动创建的controller和view文件使用了2列布局方式,所以我们可以在一下2件事中选一件来做:

我们可以更新controller文件使之使用我们之前做好的单列layout(布局)文件,或者我们也可以添加一个新的2列布局文件到admin模块。

后面的会很容易做到,也会更好看,因为所有的view文件都被设计成拥有一个自菜单项,里面存放了所有crud功能的连接,而该菜单项被放在右边的一列中。

我们只需要完成下面列表中的步骤:

1.将主应用程序中的2列布局文件copy到admin模块中,即:

复制/protected/views/layouts/column2.php到/protected/modules/admin/views/layouts/column2.php。

2.去除cop

举报
举报
版权申诉
版权申诉
word格式文档无特别注明外均可编辑修改;预览文档经过压缩,下载后原文更清晰! 立即下载
配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
应用 Yii11 PHP5 进行 敏捷 Web 开发 第十二 章迭代 添加 管理 模块
提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:应用Yii11和PHP5进行敏捷Web开发第十二章迭代9添加管理模块.docx
链接地址:https://www.bdocx.com/doc/6118125.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2022 冰点文档网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

收起
展开