cakephp中acl和auth详解
自学习cakephp
以来,一直没有完成搞懂acl,也查过了很多资料,但对它的用法也是一知半解,acl应该是cakephp中一个比较难懂的地方,这几天又重新看了下手册,发现acl没有相信中的难,但比我想象中的好用.欢迎大家转载和访问我的网站http://www.batterylaptops.co.uk
下面让我说说它的具体用法已经使用过程中应该注意到问题
准备前工作:
最好是能配置好bake,使bake命名有效,虽然这个不是必须的,不过有这个命令行工具以后我们会方便很多
在你的数据库
中导入下面的sql语句
- CREATE TABLE users (
- ? ? id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
- ? ?? ???username VARCHAR(255) NOT NULL UNIQUE,
- ? ? password CHAR(40) NOT NULL,
- ? ? group_id INT(11) NOT NULL,
- ? ? created DATETIME,
- ? ? modified DATETIME
- );
-
- CREATE TABLE groups (
- ? ? id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
- ? ? name VARCHAR(100) NOT NULL,
- ? ? created DATETIME,
- ? ? modified DATETIME
- );
- CREATE TABLE posts (
- ? ? id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
- ? ? user_id INT(11) NOT NULL,
- ? ? title VARCHAR(255) NOT NULL,
- ? ? body TEXT,
- ? ? created DATETIME,
- ? ? modified DATETIME
- );
- CREATE TABLE widgets (
- ? ? id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
- ? ? name VARCHAR(100) NOT NULL,
- ? ? part_no VARCHAR(12),
- ? ? quantity INT(11)
- );
在这里我们使用cake bake all命令工具快速生成models, controllers, 和 views(在这里我就详细介绍怎么使用cakephp中的bake命令了)
下一步,准备使用auth组件认证
首先我们打开users_controller.php在UsersController类中增加登录登出动作
- function login() {
- ? ? //Auth Magic
- }
-
- function logout() {
- ? ? //Leave empty for now.
- }
- 然后创建视图文件
app/views/users/login.ctp
- <?php
- $session->flash('auth');
- echo $form->create('User', array('action' => 'login'));
- echo $form->inputs(array(
- ? ?? ???'legend' => __('Login', true),
- ? ?? ???'username',
- ? ?? ???'password'
- ));
- echo $form->end('Login');
- ?>
下一步我们需要修改AppController(/app/app_controller.php),如果你的app目录下面没有app_controller.php文件的话,你可以自己创建一个
- <?php
- class AppController extends Controller {
- ? ? var $components = array('Acl', 'Auth');
- ? ? function beforeFilter() {
- ? ?? ???//Configure AuthComponent
- ? ?? ???$this->Auth->authorize = 'actions';
- ? ?? ???$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
- ? ?? ???$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
- ? ?? ???$this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
- ? ? }
- }
- ?>
接下来我们需要修改GroupsController和UsersController,这两个文件的目录大家应该都知道在哪里吧..
在这两个控制器中分别添加以下代码
- function beforeFilter() {
- ? ? parent::beforeFilter();
- ? ? $this->Auth->allowedActions = array('*');
- }
其实这段代码的意思是允许用户访问所有user和group下的action,当然这个后面是要改回来的
接下来我们要初始化acl表
因为现在我们的数据
库中就只有四个表,还没有导入acl表
我们用下面语句导入acl表到数据库中
在命令行中输入cake schema run create DbAcl
我们根据提示导入表
接下来我们需要修改user和group模型
首先我们打开model目录下的user.php增加以下代码(事实上你可以用下面代码替换)
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。