<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # thinkphp6.0權限擴展 auth package for thinkphp6 # 安裝 > composer require ltxlong/thinkphp6-auth # [](https://github.com/ltxlong/thinkphp6-auth#%E9%85%8D%E7%BD%AE)配置 ~~~ // auth配置 自定義數據表位置在 ./config/auth.php里面 [ 'auth_on' => 1, // 權限開關 'auth_type' => 1, // 認證方式,1為實時認證;2為登錄認證。 'auth_group' => 'auth_group', // 用戶組數據表(不帶前綴表名) 'auth_group_access' => 'auth_group_access', // 用戶-用戶組關系表(不帶前綴表名) 'auth_rule' => 'auth_rule', // 權限規則表(不帶前綴表名) 'auth_user' => 'user', // 用戶信息表(不帶前綴表名) ] // 注意:condition里的變量是用戶表(配置auth_user的值的表,通常配置為用戶表)的字段 // (當然,不配置auth_user的值為用戶表,而是其他表,那也行的!但是,condition里的變量只能是配置的表里面的字段) // (如配置auth_user的值為integral積分表,那么condition里的變量就只能是integral表里面的字段) // condition里的變量用花括號括住,如:{score} // 表的前綴在框架的數據庫配置那配置,這里的配置的表都是不帶前綴的 ~~~ # [](https://github.com/ltxlong/thinkphp6-auth#%E5%AF%BC%E5%85%A5%E6%95%B0%E6%8D%AE%E8%A1%A8)導入數據表 ~~~ ---------------------------------------------------------------------------- -- auth_rule,規則表, -- id:主鍵, -- name:規則唯一標識, title:規則中文名稱 status 狀態:為1正常,為0禁用 -- name 可以自定義名稱,也可以是模塊/控制器/方法、模塊_控制器_方法、控制器/方法、控制器_方法、控制器-方法 -- condition:規則表達式,為空表示存在就驗證,不為空表示按照條件驗證 -- condition 簡單來說,如果字段為空,則只驗證name就行;如果字段不為空,則在驗證了name的基礎上,還要驗證字段里面的條件 -- condition 條件,是user表的字段條件(準確來說,是auth_user配置的表),如 {score} > 10 ---------------------------------------------------------------------------- DROP TABLE IF EXISTS `auth_rule`; CREATE TABLE `auth_rule` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(80) NOT NULL DEFAULT '', `title` varchar(20) NOT NULL DEFAULT '', `status` tinyint(1) NOT NULL DEFAULT 1, `condition` varchar(100) NOT NULL DEFAULT '', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ---------------------------------------------------------------------------- -- auth_group 用戶組表, -- id:主鍵, title:用戶組中文名稱, rules:用戶組擁有的規則id, 多個規則","隔開,status 狀態:為1正常,為0禁用 ---------------------------------------------------------------------------- DROP TABLE IF EXISTS `auth_group`; CREATE TABLE `auth_group` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL DEFAULT '', `status` tinyint(1) NOT NULL DEFAULT 1, `rules` varchar(80) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ---------------------------------------------------------------------------- -- auth_group_access 用戶-用戶組關系表 -- uid:用戶id,group_id:用戶組id ---------------------------------------------------------------------------- DROP TABLE IF EXISTS `auth_group_access`; CREATE TABLE `auth_group_access` ( `uid` mediumint(8) unsigned NOT NULL, `group_id` mediumint(8) unsigned NOT NULL, UNIQUE KEY `uid_group_id` (`uid`,`group_id`), KEY `uid` (`uid`), KEY `group_id` (`group_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ~~~ # [](https://github.com/ltxlong/thinkphp6-auth#%E5%8E%9F%E7%90%86)原理 Auth權限認證是按規則進行認證。 在數據庫中我們有 * 規則表(auth\_rule) * 用戶組表 (auth\_group) * 用戶-用戶組關系表(auth\_group\_access) 我們在規則表中定義權限規則, 在用戶組表中定義每個用戶組有哪些權限規則,在用戶組明顯表中定義用戶所屬的用戶組。 下面舉例說明: 我們要判斷用戶是否有顯示一個操作按鈕的權限, 首先定義一個規則, 在規則表中添加一個名為 show\_button 的規則。 然后在用戶組表添加一個用戶組,定義這個用戶組有show\_button 的權限規則(auth\_group表中rules字段存得時規則ID,多個以逗號隔開), 然后在用戶組明細表定義 UID 為1 的用戶 屬于剛才這個的這個用戶組。 # [](https://github.com/ltxlong/thinkphp6-auth#%E4%BD%BF%E7%94%A8)使用 判斷權限方法 ~~~ // 引入類庫 use think\auth\Auth; // 獲取auth實例 $auth = Auth::instance(); // 檢測權限 if ($auth->check('show_button', 1)) { // 第一個參數是規則名稱, 第二個參數是用戶UID //有顯示操作按鈕的權限 } else { //沒有顯示操作按鈕的權限 } ~~~ Auth類也可以對節點進行認證,我們只要將規則名稱,定義為節點名稱就行了。 可以在自定義的公共控制器Base中定義\_initialize方法 ~~~ <?php use think\auth\Auth; use app\BaseController; class adminBaseController extends BaseController { public function _initialize() { parent::initialize(); $controller = request()->controller(); $action = request()->action(); $auth = new Auth(); if(!$auth->check($controller . '/' . $action, session('uid'))){ $this->error('你沒有權限訪問'); } } } ~~~ 這時候我們可以在數據庫中添加的節點規則, 格式為: “控制器名稱/方法名稱” 使用了多應用的情況下,如果想獲取當前模塊名稱,可以這樣: ~~~ $module = app('http')->getName(); ~~~ Auth 類 還可以多個規則一起認證 如: ~~~ $auth->check(['rule1', 'rule2'], uid); ~~~ 或者 ~~~ $auth->check('rule1,rule2', uid); ~~~ 表示 認證用戶只要有rule1的權限或rule2的權限,只要有一個規則的權限,認證返回結果就為true 即認證通過。 默認多個權限的關系是 “or” 關系,也就是說多個權限中,只要有個權限通過則通過。 我們也可以定義為 “and” 關系 ~~~ $auth->check(['rule1', 'rule2'], uid, 'and'); ~~~ 或者 ~~~ $auth->check('rule1,rule2', uid, 'and'); ~~~ Auth認證,一個用戶可以屬于多個用戶組。 比如我們對 show\_button這個規則進行認證, 用戶A 同時屬于 用戶組1 和用戶組2 兩個用戶組 , 用戶組1 沒有show\_button 規則權限, 但如果用戶組2 有show\_button 規則權限,則一樣會權限認證通過。 ~~~ $auth->getGroups(uid) ~~~ 通過上面代碼,可以獲得用戶所屬的所有用戶組,方便我們在網站上面顯示。 Auth類還可以按用戶屬性進行判斷權限, 比如 按照用戶積分進行判斷, 假設我們的用戶表 (user) 有字段 score 記錄了用戶積分。 我在規則表添加規則時,定義規則表的condition 字段,condition字段是規則條件,默認為空 表示沒有附加條件,用戶組中只有規則 就通過認證。 如果定義了 condition字段,用戶組中有規則不一定能通過認證,程序還會判斷是否滿足附加條件。 比如我們添加幾條規則: > name字段:grade1 condition字段:{score}<100 > > name字段:grade2 condition字段:{score}>100 && {score}<200 > > name字段:grade3 condition字段:{score}>200 && {score}<300 這里 {score} 表示 user 表 中字段 score 的值。 那么這時候 > $auth->check('grade1', uid) 是判斷用戶積分是不是0-100 > > $auth->check('grade2', uid) 判斷用戶積分是不是在100-200 > > $auth->check('grade3', uid) 判斷用戶積分是不是在200-300 condition 支持的運算符號: ~~~ >= > <= < && == || != ~~~ 注意:condition表達式不支持括號(),不支持單引號'',也不支持雙引號"" 復雜點的condition: ~~~ {score}<50 && {score}<100 || {name}!=abc ~~~ # [](https://github.com/ltxlong/thinkphp6-auth#%E6%9C%80%E5%90%8E)最后 因為覺得eval()函數不安全,所以自己寫了個簡單的函數來運算condition
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看