您的位置:首页 > 编程语言 > PHP开发

Thinkphp中RBAC的权限控制之配置文件(RBAC详解之连载2)

2010-11-12 16:41 393 查看
转载请注明来源:李文凯

上期我们讲了数据库的结构,THINKPHP的RBAC难点就在于权限控制。

我们现在将建好的结构截图给大家看一下:
Role表



User表



Role_user表



Node表



Access表



记得我们之前将ThinkPHP的带演示的Full包下载到本地,并且让大家解压到www根目录下。
我们现在来看一下截图,并且在根目录下面建立一个ThinkPHP的入口文件。
文件容及截图如下:



<?php
// 定义ThinkPHP框架路径
define('THINK_PATH', './ThinkPHP');
//定义项目名称和路径
define('APP_NAME', 'Rbac');
//定义项目文件在当前目录下生成对应的项目文件
define('APP_PATH', '.');
// 加载框架入口文件
require(THINK_PATH."/ThinkPHP.php");
//实例化一个网站应用实例
App::run();
?>
我们现在进入http://127.0.0.1/rbac/index.php运行一次。如出现以下界面就说明入口文件创建成功,可以接下来进行下一步操作了:



运行完成之后,我们查看文件夹截图,看到的效果应该是这样的:



我们再建一个的基准类,基准类继承Action类,后台的所有模块均继承该类。有权限和无权限用户进行的所有的操作,对项目和项目对应的模块,动作进行访问操作时,都需要经过基准类加载和验证用户的权限列表。查看该用户是否有该项目,模块和动作的权限。我们将该文件命名为: /BaseAction.class.php,根据我本地的站点目录布署情况,我将该文件放在生成出的项目文件中Lib/Action/BaseAction.class.php(注:根据自己布署的站点文件和项目文件特点行放置,但一点要放在项目的Lib/Action/)。暂时我们只写其中的一部份。代码如下:
<?php
/*
*李文凯
*/
class BaseAction extends Action {
function _initialize() {

}
}

?>

我们再新建一个演示用的操作模块UserAction.class.php,该文件也需要放置在Lib/Action文件夹下,内容如下:
<?php
/*
*李文凯
*/
class UserAction extends BaseAction{
function index(){
//仅用来测试使用,未完善功能,如有权限则会打印出“用户列表”,否则会提示用户没有权限操作
echo '用户列表';
}
function edit(){
//仅用来测试使用,未完善功能,如有权限则会打印出“编辑用户”,否则会提示用户没有权限操作
echo '编辑用户';
}
function update(){
//仅用来测试使用,未完善功能,如有权限则会打印出“更新用户”,否则会提示用户没有权限操作
echo '更新用户';
}
function delete(){
//仅用来测试使用,未完善功能,如有权限则会打印出“删除用户”,否则会提示用户没有权限操作
echo '删除用户';
}
function insert(){
//仅用来测试使用,未完善功能,如有权限则会打印出“添加用户”,否则会提示用户没有权限操作
echo '添加用户';
}
}
?>
接下来的这一步,我们将配置文件写完,配置文件一块是连接数据库的,一块是启用RBAC模块的配置文件,我会在配置文件中,每一块都进行详细的注释,希望大家看清楚,并且这个配置文件不需要去记忆,可以从Example下面的/Rbac/Conf路径下查看,复制即可。但一定要清楚,每一个配置的功能:
<?php
/*
*李文凯
*/
return array(
// 如果你的环境不支持PATHINFO 请设置为3,如果发现路径不能使用或有问题请改为3即
'URL_MODEL'=>1,
//说明你使用的数据库的类型
'DB_TYPE'=>'mysql',
//与明你使用的数据库服务器的地址,按照自己本身的具体情况来写该地址
'DB_HOST'=>'localhost',
//RBAC相关数据表所在的数据库的名字,根据自身实际情况填写
'DB_NAME'=>'rbac',
//能管理该库的mysql帐号,根据自身实际情况填写
'DB_USER'=>'root',
//对应帐号的密码,根据自身实际情况填写
'DB_PWD'=>'liwenkaihaha',
//对应mysql或其他数据库的端口,根据自身实际情阅填写
'DB_PORT'=>'3306',
//对应数据库的表前缀,根据自身实际情阅填写
'DB_PREFIX'=>'think_',

//下面一部份是RBAC的配置文件
//USER_AUTH_ON为true的话,就意味着开启RBAC
'USER_AUTH_ON'=>true,
//USER_AUTH_TYPE代表ThinkPHP 权限的两种认证方式。
//2即时模式是指即时修改用户权限即时生效
//1即时修改权限,修改完成后用户仍在系统中的话不生效。下次登陆时才会生效
'USER_AUTH_TYPE' =>1, // 默认认证类型 1 登录认证 2 实时认证
//用来标识用户Session的标志号,字符串类型随意填写即可
'USER_AUTH_KEY' =>'authId', // 用户认证SESSION标记
//用来标识管理员的标识好,这一处非常有用。
//我们在以后可以做一条判断,判断该如户如果是创始人,则激活这一项。避免管理员操作错权限后没办法进行登陆
//整个系统中的权限控制体系对该标识的用户无效
'ADMIN_AUTH_KEY' =>'administrator',
//对应的数据库中的用户表
'USER_AUTH_MODEL' =>'User', // 默认验证数据表模型
'AUTH_PWD_ENCODER' =>'md5', // 用户认证密码加密方式
//USER_AUTH_GATEWAY该项说白了就是告诉用户登陆的入口
'USER_AUTH_GATEWAY' =>'/Public/login', // 默认认证网关
//NOT_AUTH_MODULE,该项的意思为不需要验证的模块。public也会继承BaseAction基准类
//如果,没有这一项,用户访问公共的登陆模块时,都会提示没有权限
'NOT_AUTH_MODULE' =>'Public', // 默认无需认证模块
//必须要验证的模块,例如财务模块,支付管理模块等
'REQUIRE_AUTH_MODULE'=>'', // 默认需要认证模块
'NOT_AUTH_ACTION' =>'', // 默认无需认证操作
'REQUIRE_AUTH_ACTION'=>'', // 默认需要认证操作
//该项开启,就意味着整个网站中会加入未登陆用户的权限判断。例如,论坛开启游客发贴,游客就可以进行发贴操作
'GUEST_AUTH_ON' => false, // 是否开启游客授权访问
'GUEST_AUTH_ID' => 0, // 游客的用户ID
//产生关联的用户组表,前面必须要写对应的表前缀,详情请参照前面的数据表说明
'RBAC_ROLE_TABLE'=>'think_role',
//用户与组产生关系的关联表,详情请参照前面的数据表说明,前面必须要写对应的表前缀
'RBAC_USER_TABLE' => 'think_role_user',
//权限列表,存在该表中的组和节点的对应关系表。详情请参照前面的数据表说明,前面必须要写对应的表前缀
'RBAC_ACCESS_TABLE' => 'think_access',
//节点表,说明各项目,模块和动作的关系。详情请参照前面的数据表说明,前面必须要写对应的表前缀
'RBAC_NODE_TABLE' => 'think_node',
);
?>
如果大家以后记不住,可以直接使用这个配置文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: