{"id":308,"date":"2017-09-06T15:16:10","date_gmt":"2017-09-06T07:16:10","guid":{"rendered":"http:\/\/www.shenmdyw.com\/?p=308"},"modified":"2017-09-06T15:16:10","modified_gmt":"2017-09-06T07:16:10","slug":"thinkphp-auth","status":"publish","type":"post","link":"http:\/\/www.shenmdyw.com\/index.php\/2017\/09\/06\/thinkphp-auth\/","title":{"rendered":"thinkphp5.0\u540e\u53f0\u7528\u6237\u8bbf\u95ee\u6743\u9650\u63a7\u5236"},"content":{"rendered":"<p>\u6743\u9650\u662f\u91c7\u7528thinkphp 3.2 \u6743\u9650\u63a7\u5236\u505a\u4e86\u4e00\u4e9b\u4fee\u6539\u800c\u6765<\/p>\n<p>\u5728thinkphp5\u63a7\u5236\u5668index\u4e2d\u5199\u5165\u4ee3\u7801<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">&lt;?php \r\nnamespace app\\index\\controller; \r\nload_trait('controller\/Jump'); \/\/ \u5f15\u5165traits\\controller\\Jump \r\n\\think\\Loader::import('thinkauth.Auth',VENDOR_PATH);\r\nuse thinkauth\\Auth; \r\nclass Index { \r\nuse \\traits\\controller\\Jump;\r\npublic function index() { \r\n$auth = new Auth(); \r\n\/\/index\/index\u662f\u9700\u8981\u9a8c\u8bc1\u6743\u9650\u7684\u8bbf\u95ee\u8def\u5f84,1\u662f\u7528\u6237\u7684id\r\nif(!$auth-&gt;check('index\/index',1)){\r\n            echo \"\u6ca1\u6709\u6743\u9650\";exit;\r\n        }\r\n        return view('index',['kk'=&gt;'2222']);\r\n    }\r\n}<\/pre>\n<p><!--more-->\u6570\u636e\u5e93\u8868<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">\/*\r\nSQLyog Ultimate v11.24 (32 bit)\r\nMySQL - 5.5.53 : Database - sentinel\r\n*********************************************************************\r\n*\/\r\n\r\n\r\n\/*!40101 SET NAMES utf8 *\/;\r\n\r\n\/*!40101 SET SQL_MODE=''*\/;\r\n\r\n\/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 *\/;\r\n\/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 *\/;\r\n\/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' *\/;\r\n\/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 *\/;\r\nCREATE DATABASE \/*!32312 IF NOT EXISTS*\/`sentinel` \/*!40100 DEFAULT CHARACTER SET utf8 *\/;\r\n\r\nUSE `sentinel`;\r\n\r\n\/*Table structure for table `think_admin` *\/\r\n\r\nDROP TABLE IF EXISTS `think_admin`;\r\n\r\nCREATE TABLE `think_admin` (\r\n  `id` int(11) NOT NULL AUTO_INCREMENT,\r\n  `username` varchar(20) NOT NULL DEFAULT '',\r\n  `password` varchar(32) NOT NULL DEFAULT '',\r\n  `name` varchar(20) NOT NULL DEFAULT '',\r\n  `email` varchar(30) NOT NULL DEFAULT '',\r\n  `juese` tinyint(4) NOT NULL DEFAULT '0' COMMENT '1.\u5408\u4f19\u4eba',\r\n  `ctime` int(11) NOT NULL DEFAULT '0',\r\n  PRIMARY KEY (`id`)\r\n) ENGINE=MyISAM AUTO_INCREMENT=85 DEFAULT CHARSET=utf8;\r\n\r\n\/*Data for the table `think_admin` *\/\r\n\r\ninsert  into `think_admin`(`id`,`username`,`password`,`name`,`email`,`juese`,`ctime`) values (1,'admin','123456','ssss','fff',0,0);\r\n\r\n\/*Table structure for table `think_auth_group` *\/\r\n\r\nDROP TABLE IF EXISTS `think_auth_group`;\r\n\r\nCREATE TABLE `think_auth_group` (\r\n  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,\r\n  `title` char(100) NOT NULL DEFAULT '',\r\n  `status` tinyint(1) NOT NULL DEFAULT '1',\r\n  `rules` char(80) NOT NULL DEFAULT '',\r\n  PRIMARY KEY (`id`)\r\n) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;\r\n\r\n\/*Data for the table `think_auth_group` *\/\r\n-- ----------------------------\r\n-- think_auth_group \u7528\u6237\u7ec4\u8868\uff0c \r\n-- id\uff1a\u4e3b\u952e\uff0c title:\u7528\u6237\u7ec4\u4e2d\u6587\u540d\u79f0\uff0c rules\uff1a\u7528\u6237\u7ec4\u62e5\u6709\u7684\u89c4\u5219id\uff0c \u591a\u4e2a\u89c4\u5219\",\"\u9694\u5f00\uff0cstatus \u72b6\u6001\uff1a\u4e3a1\u6b63\u5e38\uff0c\u4e3a0\u7981\u7528\r\n-- ----------------------------\r\ninsert  into `think_auth_group`(`id`,`title`,`status`,`rules`) values (1,'\u7ba1\u7406\u5458',1,'1');\r\n\r\n\/*Table structure for table `think_auth_group_access` *\/\r\n-- ----------------------------\r\n-- think_auth_group_access \u7528\u6237\u7ec4\u660e\u7ec6\u8868\r\n-- uid:\u7528\u6237id\uff0cgroup_id\uff1a\u7528\u6237\u7ec4id\r\n-- ----------------------------\r\nDROP TABLE IF EXISTS `think_auth_group_access`;\r\n\r\nCREATE TABLE `think_auth_group_access` (\r\n  `uid` mediumint(8) unsigned NOT NULL,\r\n  `group_id` mediumint(8) unsigned NOT NULL,\r\n  UNIQUE KEY `uid_group_id` (`uid`,`group_id`),\r\n  KEY `uid` (`uid`),\r\n  KEY `group_id` (`group_id`)\r\n) ENGINE=MyISAM DEFAULT CHARSET=utf8;\r\n\r\n\/*Data for the table `think_auth_group_access` *\/\r\n\r\ninsert  into `think_auth_group_access`(`uid`,`group_id`) values (1,1);\r\n\r\n\/*Table structure for table `think_auth_rule` *\/\r\n-- ----------------------------\r\n-- think_auth_rule\uff0c\u89c4\u5219\u8868\uff0c\r\n-- id:\u4e3b\u952e\uff0cname\uff1a\u89c4\u5219\u552f\u4e00\u6807\u8bc6, title\uff1a\u89c4\u5219\u4e2d\u6587\u540d\u79f0 status \u72b6\u6001\uff1a\u4e3a1\u6b63\u5e38\uff0c\u4e3a0\u7981\u7528\uff0ccondition\uff1a\u89c4\u5219\u8868\u8fbe\u5f0f\uff0c\u4e3a\u7a7a\u8868\u793a\u5b58\u5728\u5c31\u9a8c\u8bc1\uff0c\u4e0d\u4e3a\u7a7a\u8868\u793a\u6309\u7167\u6761\u4ef6\u9a8c\u8bc1\r\n-- ----------------------------\r\n\r\nDROP TABLE IF EXISTS `think_auth_rule`;\r\n\r\nCREATE TABLE `think_auth_rule` (\r\n  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,\r\n  `name` char(80) NOT NULL DEFAULT '',\r\n  `title` char(20) NOT NULL DEFAULT '',\r\n  `type` tinyint(1) NOT NULL DEFAULT '1',\r\n  `status` tinyint(1) NOT NULL DEFAULT '1',\r\n  `condition` char(100) NOT NULL DEFAULT '',\r\n  PRIMARY KEY (`id`),\r\n  UNIQUE KEY `name` (`name`)\r\n) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;\r\n\r\n\/*Data for the table `think_auth_rule` *\/\r\n\r\ninsert  into `think_auth_rule`(`id`,`name`,`title`,`type`,`status`,`condition`) values (1,'index\/index','\u4e3b\u9875',1,1,'');\r\n\r\n\/*!40101 SET SQL_MODE=@OLD_SQL_MODE *\/;\r\n\/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS *\/;\r\n\/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS *\/;\r\n\/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES *\/;\r\n<\/pre>\n<p>\u5728thinkphp5 vendor\u76ee\u5f55\u4e0b\u65b0\u5efathinkauth\/Auth.php\uff0c\u653e\u5165\u4ee5\u4e0b\u4ee3\u7801<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">&lt;?php\r\n\/\/ +----------------------------------------------------------------------\r\n\/\/ | ThinkPHP [ WE CAN DO IT JUST THINK IT ]\r\n\/\/ +----------------------------------------------------------------------\r\n\/\/ | Copyright (c) 2011 http:\/\/thinkphp.cn All rights reserved.\r\n\/\/ +----------------------------------------------------------------------\r\n\/\/ | Licensed ( http:\/\/www.apache.org\/licenses\/LICENSE-2.0 )\r\n\/\/ +----------------------------------------------------------------------\r\n\/\/ | Author: luofei614 &lt;weibo.com\/luofei614&gt;\u3000\r\n\/\/ +----------------------------------------------------------------------\r\nnamespace thinkauth;\r\n\/**\r\n * \u6743\u9650\u8ba4\u8bc1\u7c7b\r\n * \u529f\u80fd\u7279\u6027\uff1a\r\n * 1\uff0c\u662f\u5bf9\u89c4\u5219\u8fdb\u884c\u8ba4\u8bc1\uff0c\u4e0d\u662f\u5bf9\u8282\u70b9\u8fdb\u884c\u8ba4\u8bc1\u3002\u7528\u6237\u53ef\u4ee5\u628a\u8282\u70b9\u5f53\u4f5c\u89c4\u5219\u540d\u79f0\u5b9e\u73b0\u5bf9\u8282\u70b9\u8fdb\u884c\u8ba4\u8bc1\u3002\r\n *      $auth=new Auth();  $auth-&gt;check('\u89c4\u5219\u540d\u79f0','\u7528\u6237id')\r\n * 2\uff0c\u53ef\u4ee5\u540c\u65f6\u5bf9\u591a\u6761\u89c4\u5219\u8fdb\u884c\u8ba4\u8bc1\uff0c\u5e76\u8bbe\u7f6e\u591a\u6761\u89c4\u5219\u7684\u5173\u7cfb\uff08or\u6216\u8005and\uff09\r\n *      $auth=new Auth();  $auth-&gt;check('\u89c4\u52191,\u89c4\u52192','\u7528\u6237id','and') \r\n *      \u7b2c\u4e09\u4e2a\u53c2\u6570\u4e3aand\u65f6\u8868\u793a\uff0c\u7528\u6237\u9700\u8981\u540c\u65f6\u5177\u6709\u89c4\u52191\u548c\u89c4\u52192\u7684\u6743\u9650\u3002 \u5f53\u7b2c\u4e09\u4e2a\u53c2\u6570\u4e3aor\u65f6\uff0c\u8868\u793a\u7528\u6237\u503c\u9700\u8981\u5177\u5907\u5176\u4e2d\u4e00\u4e2a\u6761\u4ef6\u5373\u53ef\u3002\u9ed8\u8ba4\u4e3aor\r\n * 3\uff0c\u4e00\u4e2a\u7528\u6237\u53ef\u4ee5\u5c5e\u4e8e\u591a\u4e2a\u7528\u6237\u7ec4(think_auth_group_access\u8868 \u5b9a\u4e49\u4e86\u7528\u6237\u6240\u5c5e\u7528\u6237\u7ec4)\u3002\u6211\u4eec\u9700\u8981\u8bbe\u7f6e\u6bcf\u4e2a\u7528\u6237\u7ec4\u62e5\u6709\u54ea\u4e9b\u89c4\u5219(think_auth_group \u5b9a\u4e49\u4e86\u7528\u6237\u7ec4\u6743\u9650)\r\n * \r\n * 4\uff0c\u652f\u6301\u89c4\u5219\u8868\u8fbe\u5f0f\u3002\r\n *      \u5728think_auth_rule \u8868\u4e2d\u5b9a\u4e49\u4e00\u6761\u89c4\u5219\u65f6\uff0c\u5982\u679ctype\u4e3a1\uff0c condition\u5b57\u6bb5\u5c31\u53ef\u4ee5\u5b9a\u4e49\u89c4\u5219\u8868\u8fbe\u5f0f\u3002 \u5982\u5b9a\u4e49{score}&gt;5  and {score}&lt;100 \u8868\u793a\u7528\u6237\u7684\u5206\u6570\u57285-100\u4e4b\u95f4\u65f6\u8fd9\u6761\u89c4\u5219\u624d\u4f1a\u901a\u8fc7\u3002 *\/ use think\\config; class Auth{ \/\/\u9ed8\u8ba4\u914d\u7f6e protected $_config = array( 'AUTH_ON' =&gt; true,                      \/\/ \u8ba4\u8bc1\u5f00\u5173\r\n        'AUTH_TYPE'         =&gt; 1,                         \/\/ \u8ba4\u8bc1\u65b9\u5f0f\uff0c1\u4e3a\u5b9e\u65f6\u8ba4\u8bc1\uff1b2\u4e3a\u767b\u5f55\u8ba4\u8bc1\u3002\r\n        'AUTH_GROUP'        =&gt; 'auth_group',        \/\/ \u7528\u6237\u7ec4\u6570\u636e\u8868\u540d\r\n        'AUTH_GROUP_ACCESS' =&gt; 'auth_group_access', \/\/ \u7528\u6237-\u7528\u6237\u7ec4\u5173\u7cfb\u8868\r\n        'AUTH_RULE'         =&gt; 'auth_rule',         \/\/ \u6743\u9650\u89c4\u5219\u8868\r\n        'AUTH_USER'         =&gt; 'member'             \/\/ \u7528\u6237\u4fe1\u606f\u8868\r\n    );\r\n\r\n    public function __construct() {\r\n        $prefix = config::get('database.prefix');\r\n       \/\/ echo $prefix;\r\n        $this-&gt;_config['AUTH_GROUP'] = $prefix.$this-&gt;_config['AUTH_GROUP'];\r\n        $this-&gt;_config['AUTH_RULE'] = $prefix.$this-&gt;_config['AUTH_RULE'];\r\n        $this-&gt;_config['AUTH_USER'] = $prefix.$this-&gt;_config['AUTH_USER'];\r\n        $this-&gt;_config['AUTH_GROUP_ACCESS'] = $prefix.$this-&gt;_config['AUTH_GROUP_ACCESS'];\r\n        if (config::get('AUTH_CONFIG')) {\r\n            \/\/\u53ef\u8bbe\u7f6e\u914d\u7f6e\u9879 AUTH_CONFIG, \u6b64\u914d\u7f6e\u9879\u4e3a\u6570\u7ec4\u3002\r\n            $this-&gt;_config = array_merge($this-&gt;_config, config::get('AUTH_CONFIG'));\r\n        }\r\n    }\r\n\r\n    \/**\r\n      * \u68c0\u67e5\u6743\u9650\r\n      * @param name string|array  \u9700\u8981\u9a8c\u8bc1\u7684\u89c4\u5219\u5217\u8868,\u652f\u6301\u9017\u53f7\u5206\u9694\u7684\u6743\u9650\u89c4\u5219\u6216\u7d22\u5f15\u6570\u7ec4\r\n      * @param uid  int           \u8ba4\u8bc1\u7528\u6237\u7684id\r\n      * @param string mode        \u6267\u884ccheck\u7684\u6a21\u5f0f\r\n      * @param relation string    \u5982\u679c\u4e3a 'or' \u8868\u793a\u6ee1\u8db3\u4efb\u4e00\u6761\u89c4\u5219\u5373\u901a\u8fc7\u9a8c\u8bc1;\u5982\u679c\u4e3a 'and'\u5219\u8868\u793a\u9700\u6ee1\u8db3\u6240\u6709\u89c4\u5219\u624d\u80fd\u901a\u8fc7\u9a8c\u8bc1\r\n      * @return boolean           \u901a\u8fc7\u9a8c\u8bc1\u8fd4\u56detrue;\u5931\u8d25\u8fd4\u56defalse\r\n     *\/\r\n    public function check($name, $uid, $type=1, $mode='url', $relation='or') {\r\n        if (!$this-&gt;_config['AUTH_ON'])\r\n            return true;\r\n        $authList = $this-&gt;getAuthList($uid,$type); \/\/\u83b7\u53d6\u7528\u6237\u9700\u8981\u9a8c\u8bc1\u7684\u6240\u6709\u6709\u6548\u89c4\u5219\u5217\u8868\r\n        if (is_string($name)) {\r\n            $name = strtolower($name);\r\n            if (strpos($name, ',') !== false) {\r\n                $name = explode(',', $name);\r\n            } else {\r\n                $name = array($name);\r\n            }\r\n        }\r\n        $list = array(); \/\/\u4fdd\u5b58\u9a8c\u8bc1\u901a\u8fc7\u7684\u89c4\u5219\u540d\r\n        if ($mode=='url') {\r\n            $REQUEST = unserialize( strtolower(serialize($_REQUEST)) );\r\n        }\r\n        foreach ( $authList as $auth ) {\r\n            $query = preg_replace('\/^.+\\?\/U','',$auth);\r\n            if ($mode=='url' &amp;&amp; $query!=$auth ) {\r\n                parse_str($query,$param); \/\/\u89e3\u6790\u89c4\u5219\u4e2d\u7684param\r\n                $intersect = array_intersect_assoc($REQUEST,$param);\r\n                $auth = preg_replace('\/\\?.*$\/U','',$auth);\r\n                if ( in_array($auth,$name) &amp;&amp; $intersect==$param ) {  \/\/\u5982\u679c\u8282\u70b9\u76f8\u7b26\u4e14url\u53c2\u6570\u6ee1\u8db3\r\n                    $list[] = $auth ;\r\n                }\r\n            }else if (in_array($auth , $name)){\r\n                $list[] = $auth ;\r\n            }\r\n        }\r\n        if ($relation == 'or' and !empty($list)) {\r\n            return true;\r\n        }\r\n        $diff = array_diff($name, $list);\r\n        if ($relation == 'and' and empty($diff)) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    \/**\r\n     * \u6839\u636e\u7528\u6237id\u83b7\u53d6\u7528\u6237\u7ec4,\u8fd4\u56de\u503c\u4e3a\u6570\u7ec4\r\n     * @param  uid int     \u7528\u6237id\r\n     * @return array       \u7528\u6237\u6240\u5c5e\u7684\u7528\u6237\u7ec4 array(\r\n     *     array('uid'=&gt;'\u7528\u6237id','group_id'=&gt;'\u7528\u6237\u7ec4id','title'=&gt;'\u7528\u6237\u7ec4\u540d\u79f0','rules'=&gt;'\u7528\u6237\u7ec4\u62e5\u6709\u7684\u89c4\u5219id,\u591a\u4e2a,\u53f7\u9694\u5f00'),\r\n     *     ...)   \r\n     *\/\r\n    public function getGroups($uid) {\r\n        static $groups = array();\r\n        if (isset($groups[$uid]))\r\n            return $groups[$uid];\r\n        $user_groups = db()\r\n            -&gt;table($this-&gt;_config['AUTH_GROUP_ACCESS'])\r\n            -&gt;alias('a')\r\n            -&gt;where(\"a.uid='$uid' and g.status='1'\")\r\n            -&gt;join($this-&gt;_config['AUTH_GROUP'].' g',' a.group_id=g.id')\r\n            -&gt;field('uid,group_id,title,rules')-&gt;select();\r\n        $groups[$uid]=$user_groups?:array();\r\n        return $groups[$uid];\r\n    }\r\n\r\n    \/**\r\n     * \u83b7\u5f97\u6743\u9650\u5217\u8868\r\n     * @param integer $uid  \u7528\u6237id\r\n     * @param integer $type \r\n     *\/\r\n    protected function getAuthList($uid,$type) {\r\n        static $_authList = array(); \/\/\u4fdd\u5b58\u7528\u6237\u9a8c\u8bc1\u901a\u8fc7\u7684\u6743\u9650\u5217\u8868\r\n        $t = implode(',',(array)$type);\r\n        if (isset($_authList[$uid.$t])) {\r\n            return $_authList[$uid.$t];\r\n        }\r\n        if( $this-&gt;_config['AUTH_TYPE']==2 &amp;&amp; isset($_SESSION['_AUTH_LIST_'.$uid.$t])){\r\n            return $_SESSION['_AUTH_LIST_'.$uid.$t];\r\n        }\r\n\r\n        \/\/\u8bfb\u53d6\u7528\u6237\u6240\u5c5e\u7528\u6237\u7ec4\r\n        $groups = $this-&gt;getGroups($uid);\r\n        $ids = array();\/\/\u4fdd\u5b58\u7528\u6237\u6240\u5c5e\u7528\u6237\u7ec4\u8bbe\u7f6e\u7684\u6240\u6709\u6743\u9650\u89c4\u5219id\r\n        foreach ($groups as $g) {\r\n            $ids = array_merge($ids, explode(',', trim($g['rules'], ',')));\r\n        }\r\n        $ids = array_unique($ids);\r\n        if (empty($ids)) {\r\n            $_authList[$uid.$t] = array();\r\n            return array();\r\n        }\r\n\r\n        $map=array(\r\n            'id'=&gt;array('in',$ids),\r\n            'type'=&gt;$type,\r\n            'status'=&gt;1,\r\n        );\r\n        \/\/\u8bfb\u53d6\u7528\u6237\u7ec4\u6240\u6709\u6743\u9650\u89c4\u5219\r\n        $rules = db()-&gt;table($this-&gt;_config['AUTH_RULE'])-&gt;where($map)-&gt;field('condition,name')-&gt;select();\r\n\r\n        \/\/\u5faa\u73af\u89c4\u5219\uff0c\u5224\u65ad\u7ed3\u679c\u3002\r\n        $authList = array();   \/\/\r\n        foreach ($rules as $rule) {\r\n            if (!empty($rule['condition'])) { \/\/\u6839\u636econdition\u8fdb\u884c\u9a8c\u8bc1\r\n                $user = $this-&gt;getUserInfo($uid);\/\/\u83b7\u53d6\u7528\u6237\u4fe1\u606f,\u4e00\u7ef4\u6570\u7ec4\r\n\r\n                $command = preg_replace('\/\\{(\\w*?)\\}\/', '$user[\\'\\\\1\\']', $rule['condition']);\r\n                \/\/dump($command);\/\/debug\r\n                @(eval('$condition=(' . $command . ');'));\r\n                if ($condition) {\r\n                    $authList[] = strtolower($rule['name']);\r\n                }\r\n            } else {\r\n                \/\/\u53ea\u8981\u5b58\u5728\u5c31\u8bb0\u5f55\r\n                $authList[] = strtolower($rule['name']);\r\n            }\r\n        }\r\n        $_authList[$uid.$t] = $authList;\r\n        if($this-&gt;_config['AUTH_TYPE']==2){\r\n            \/\/\u89c4\u5219\u5217\u8868\u7ed3\u679c\u4fdd\u5b58\u5230session\r\n            $_SESSION['_AUTH_LIST_'.$uid.$t]=$authList;\r\n        }\r\n        return array_unique($authList);\r\n    }\r\n\r\n    \/**\r\n     * \u83b7\u5f97\u7528\u6237\u8d44\u6599,\u6839\u636e\u81ea\u5df1\u7684\u60c5\u51b5\u8bfb\u53d6\u6570\u636e\u5e93\r\n     *\/\r\n    protected function getUserInfo($uid) {\r\n        static $userinfo=array();\r\n        if(!isset($userinfo[$uid])){\r\n             $userinfo[$uid]=db()-&gt;where(array('uid'=&gt;$uid))-&gt;table($this-&gt;_config['AUTH_USER'])-&gt;find();\r\n        }\r\n        return $userinfo[$uid];\r\n    }\r\n\r\n}\r\n<\/pre>\n<p>\u73b0\u5728\u8bbf\u95eeindex\u4e3b\u9875\u5c31\u80fd\u770b\u5230222\u4e86<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6743\u9650\u662f\u91c7\u7528thinkphp 3.2 \u6743\u9650\u63a7\u5236\u505a\u4e86\u4e00\u4e9b\u4fee\u6539\u800c\u6765 \u5728thinkphp5\u63a7\u5236\u5668index\u4e2d\u5199\u5165\u4ee3\u7801  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[128,129,130],"class_list":["post-308","post","type-post","status-publish","format-standard","hentry","category-php","tag-thinkphp5","tag-thinkphp","tag-tp5","clear"],"_links":{"self":[{"href":"http:\/\/www.shenmdyw.com\/index.php\/wp-json\/wp\/v2\/posts\/308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.shenmdyw.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.shenmdyw.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.shenmdyw.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.shenmdyw.com\/index.php\/wp-json\/wp\/v2\/comments?post=308"}],"version-history":[{"count":2,"href":"http:\/\/www.shenmdyw.com\/index.php\/wp-json\/wp\/v2\/posts\/308\/revisions"}],"predecessor-version":[{"id":311,"href":"http:\/\/www.shenmdyw.com\/index.php\/wp-json\/wp\/v2\/posts\/308\/revisions\/311"}],"wp:attachment":[{"href":"http:\/\/www.shenmdyw.com\/index.php\/wp-json\/wp\/v2\/media?parent=308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.shenmdyw.com\/index.php\/wp-json\/wp\/v2\/categories?post=308"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.shenmdyw.com\/index.php\/wp-json\/wp\/v2\/tags?post=308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}