Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1261732
  • 博文数量: 315
  • 博客积分: 10397
  • 博客等级: 上将
  • 技术积分: 3731
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 21:21
文章分类

全部博文(315)

文章存档

2015年(10)

2014年(3)

2013年(2)

2012年(8)

2011年(8)

2010年(29)

2009年(59)

2008年(77)

2007年(119)

分类:

2007-09-25 03:01:52

经过几小时的代码奋战,终于将FleaPHP的Rdbc功能搞定,非常开心,下面贴出成功权限控制的代码:
 
 
1、index.php
 define('APP_DIR',dirname(__FILE__) .'/APP');
 define('DEBUG_MODE',true);
 require('FLEA/FLEA.php');
 FLEA::setAppInf('RBACSessionKey','user');
 set_app_inf('dispatcher', 'FLEA_Dispatcher_Auth');
 FLEA::loadAppInf(APP_DIR .'/Config/DSN.php');
 FLEA::import(APP_DIR);
 FLEA::loadAppInf(dirname(__FILE__).'/include/function.php');    //加载一个应用程序
 FLEA::loadAppInf(dirname(__FILE__) .'/include/Benchmark/Timer.php');
 FLEA::setAppInf('dispatcherFailedCallback','displayFailedOtherCallback'); //自定义 无操作函数
 FLEA::runMVC();
 
2、登陆函数
 load_class('FLEA_Com_RBAC_RolesManager');
class MyRolesManager extends FLEA_Com_RBAC_RolesManager
{
    var $tableName = 'roles';
    var $primaryKey = 'role_id';
}
load_class('FLEA_Com_RBAC_UsersManager');
class MyUsersManager extends FLEA_Com_RBAC_UsersManager
{
    var $tableName = 'users';
    var $primaryKey = 'user_id';
    var $manyToMany = array(
        'tableClass' => 'MyRolesManager',
        'mappingName' => 'roles',
        'joinTable' => 'roles_users',
    );
}
/**
 * 处理用户登录
 */
 function login($username, $password) {
     $usersManager =& get_singleton('MyUsersManager');
     /* @var $usersManager MyUsersManager */
 
     // 验证用户名和密码是否正确
     $user = $usersManager->findByUsername($username);
     if (!$user || !$usersManager->checkPassword($password, $user[$usersManager->passwordField])) {
         error_message("用户名或密码错!");
     }
 
     // 获取用户角色信息
     $roles = $usersManager->fetchRoles($user);
 
     // 获得 FLEA_Com_RBAC 组件实例
     $rbac =& get_singleton('FLEA_Com_RBAC');
     /* @var $rbac FLEA_Com_RBAC */
  //dump($user);
     // 为了降低服务器负担,我们只在 session 中存储用户ID和用户名
     $sessionUser = array(
         'USERID' => $user[$usersManager->primaryKey],
         'USERNAME' => $user[$usersManager->usernameField],
         'REALNAME' => $user['realname'],
         'DEPOT' =>$user['depot'],
     );
 
     // 将用户ID、用户名和角色信息保存到 session
     $rbac->setUser($sessionUser, $roles);
    
     // 登录成功
     //error_message("用户".$user['realname'] ."在" .date(Ymd) ."成功登陆" .$user['depot']);
     //eturn $roles;
     return $_SESSION;
    
 }
 
3、Default.act.php
return array(
    'allow' => RBAC_EVERYONE,
     'actions' => array(
          'index' => array(
                'allow' =>RBAC_EVERYONE,
              ),
          'certify' => array(
                'allow' =>RBAC_EVERYONE,
                ),
    ),
);
 
4、赋予角色权限
require('FLEA/FLEA.php');
// 假定数据库连接信息保存在 APP/Config/DSN.php 文件中
register_app_inf('APP/Config/DSN.php');
// 由于没有调用 run() 来启动 MVC 模式,所以需要自行初始化 FleaPHP
__FLEA_PREPARE();
load_class('FLEA_Com_RBAC_RolesManager');
class MyRolesManager extends FLEA_Com_RBAC_RolesManager
{
    var $tableName = 'roles';
    var $primaryKey = 'role_id';
}
load_class('FLEA_Com_RBAC_UsersManager');
class MyUsersManager extends FLEA_Com_RBAC_UsersManager
{
    var $tableName = 'users';
    var $primaryKey = 'user_id';
    var $manyToMany = array(
        'tableClass' => 'MyRolesManager',
        'mappingName' => 'roles',
        'joinTable' => 'roles_users',
    );
}
$usersManager =& get_singleton('MyUsersManager');
/* @var $usersManager MyUsersManager */
// 取出用户
$user = $usersManager->findByUsername('LCR');
// 清空现有的角色信息
$user[$usersManager->rolesField] = array();
// 取出 POWER_USER 角色
$rolesManager =& get_singleton('MyRolesManager');
/* @var rolesManager MyRolesManager */
$role = $rolesManager->find(array('rolename' => 'POWER_USER'));
// 指定给用户
$user[$usersManager->rolesField][] = $role[$rolesManager->primaryKey];
// 取出 MANAGER 角色
$role = $rolesManager->find(array('rolename' => 'MANAGER'));
// 指定给用户
$user[$usersManager->rolesField][] = $role[$rolesManager->primaryKey];
// 保存修改后的用户信息
$usersManager->update($user);
// 重新从数据库读取用户信息,确定为用户指定的角色信息已经保存到数据库
$user = $usersManager->findByUsername('LCR');
dump($user);
 
在这之上加上一个后台控制就OK了。
 
 
阅读(2993) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-08-29 22:43:14

很高兴看到fleaphp的分析文章