zoukankan      html  css  js  c++  java
  • ThinkPHP + Discuz 整合方法

    ThinkPHP + Discuz 整合方法
    以下是Discuz6的整合方法,discuz5请按照里面的说明进行相应的修改,也可以使用了。

    1.在项目的action目录下信件PublicAction.class.php。这样写:
    代码: 复制内容到剪贴板
    class PublicAction extends Action

    {

        function login()

        {

         $this->display();

              if(!isset($_SESSIONC('USER_AUTH_KEY'))||$_SESSIONC('USER_AUTH_KEY')==0) {

                $this->display();

                return ;

            }else {

                redirect(__APP__);

           }

        }

    function index()

    {

      //如果通过认证跳转到首页

      redirect(__APP__);

    }

        function checkLogin()

        {

      // 这里使用用户名、密码和状态的方式进行认证。这里是discuz6.1,discuz5的加密方式不一样。用discuz5的话你需要修改下面这一句。

    //注意!!!这里直接把$_POST['name']和$_POST['password']放到查询语句中是不安全的。请先进行处理!我是自己处理的,这里没有贴。我在找ThinkPHP中的处理函数,还没有找到。

      $authInfo = RBAC::authenticate("`username`='".$_POST['name']."' AND `password` = md5(concat(md5('".$_POST['password']."'),`salt`))");

      if(false === $authInfo) {

       echo '登录失败,请检查用户名和密码是否有误!';

      }else {

       // 设置认证识别号

       session_register(C('USER_AUTH_KEY'));

       session_register('loginid');

       $_SESSION[C('USER_AUTH_KEY')] = $authInfo["uid"]; // 这里用户表的id字段

       $_SESSION["loginid"] = $authInfo["username"];// 这里用户表的用户名字段

       //获取并保存用户访问权限列表

       RBAC::saveAccessList();

       dump($_SESSION);

       echo strtoupper(APP_NAME)." ".strtoupper(MODULE_NAME)." ".strtoupper(ACTION_NAME);

      }

        }

    }
    2.然后在模板中新增登陆模板,路径为Tpl/default/Public/Login.html这里把官方教程中的模板贴出来,省的再去找了:
    代码: 复制内容到剪贴板
    <body>

    <form method=post name="login" id="form1" action="__URL__/checkLogin">

    <div class="tcenter hmargin">

    <table id="checklist" class="login shadow" cellpadding=0 cellspacing=0 >

    <tr><td height="5" colspan="2" class="toptd" ></td></tr>

    <tr class="row" ><th colspan="2" class="tcenter space">  系统管理登录  </th></tr>

    <tr><td height="5" colspan="2" class="toptd" ></td></tr>

    <tr class="row" ><td colspan="2" class="tcenter"><div id="result" class="result none"></div></td></tr>

    <tr class="row" ><td class="tright" width="25%">帐 号:</td><td><input type="text" class="medium bleftrequire" check="require" warning="请输入帐号" name="name"></td></tr>

    <tr class="row" ><td class="tright">密 码:</td><td><input type="password" class="medium bleftrequire" check="require" warning="请输入密码" name="password"></td></tr>

    <tr class="row" ><td class="tcenter" align="justify" colspan="2">

    <input type="button" value="刷 新" onclick="fleshverify()" class="submit small"><input type="submit" value="登 录" class="submit small hmargin">

    <input type="reset" value="重 置" class="submit small">

    </td></tr>

    <tr><td height="5" colspan="2" class="bottomtd" ></td></tr>

    </table>

    </div>

    </form>

    </body>
    3.在Model目录中新增一个UserModel.class.php
    代码如下:
    代码: 复制内容到剪贴板
    class UserModel extends Model

    {

    protected $trueTableName = 'uc_members';//这里是ucenter的用户表的表名。如果你在uc中修改了前缀,就把表名的uc部分修改成自己的。

    }
    4.可以了进行登录了。就这些。昨天看ThinkPHP的文档看了一整天。TP不是一般的强大啊。个人感觉比FLEAPHP强很多。

    如果你使用的是discuz5版本,由于没有ucenter,需要修改两个部分。
    一是 PublicAction.class.php中的
    $authInfo = RBAC::authenticate("`username`='".$_POST['name']."' AND `password` = md5(concat(md5('".$_POST['password']."'),`salt`))");
    二是 UserModel.class.php 中的'uc_members'改成相应数据表。


    5. 下载RBAC。
    在使用中除了上面的还不够。还要进行RBAC赋权的操作。这里你需要下载一个官方的RBAC示例,推荐放在和你的程序平级的目录。

    6.修改RBAC
    Model下的UserModel.class.php内容是下面的代码。这个和前面的UserModel.class.php一致。可以直接复制过来
    代码: 复制内容到剪贴板
    class UserModel extends Model

    {

    var $trueTableName='uc_members';

    }
    还要修改GroupAction.class.php中的function user()
    代码如下:
    代码: 复制内容到剪贴板
    function user()

        {

            //读取系统的用户列表

      //以下三句请根据实际情况进行修改

            $userDao    =   D("User");

            $list  = $userDao->findAll('','uid,username');//我们修改了这里

            $userList = $userDao->getCols($list,'uid,username');//还有这里,其他的不要动了。

      $groupDao    =   D("Group");

            $list   =  $groupDao->findAll('','id,name');

            $groupList = $groupDao->getCols($list,'id,name');

      $this->assign("groupList",$groupList);

            //获取当前用户组信息

            $groupId =  isset($_GET['id'])?$_GET['id']:'';

      $groupUserList = array();

      if(!empty($groupId)) {

       $this->assign("selectGroupId",$groupId);

       //获取当前组的用户列表

                $list = $groupDao->getGroupUserList($groupId);

                $groupUserList = $groupDao->getCols($list,'id,id');

                   

      }

            //$userList = array_diff_key($userList,$groupUserList);

      $this->assign('groupUserList',$groupUserList);

            $this->assign('userList',$userList);

            $this->display();

            return;

        }
    7.现在可以进行分组操作了。

  • 相关阅读:
    javascript中万恶的function
    Windows7下如何安装部署秋色园CYQBlog源码V1.0网站
    Extjs2.2:Panel里面嵌入Excel表格
    Extjs做界面很酷;感谢博客园给我一个展示的机会;借此向大家展示一下EXTJS的魅力
    16Aspx.com改进版Extjs简单版酒店管理系统提供下载!
    Ext2.2+ASP.NET开发框架已完成欢迎大家下载!
    Extj+Asp.net开发框架V1.1树的操作
    Ext2.2程序开发实战(1)登录界面
    扩展欧几里得定理
    C语言 统计整数二进制表示中1的个数
  • 原文地址:https://www.cnblogs.com/bluealine/p/5730028.html
Copyright © 2011-2022 走看看