摘要:之前使用,自定義角色組,發(fā)現(xiàn)編輯刪除修改等等權限可以直接權限管理中選擇,然后用不同的角色登陸,會顯示對應的權限按鈕。期待的結(jié)果是直接使用方法,設置為批量審核,為審核方法,對于各個權限組可以直接調(diào)用。
之前使用fastadmin,自定義角色組,發(fā)現(xiàn)編輯/刪除/修改等等權限可以直接權限管理中選擇,然后用不同的角色登陸,會顯示對應的權限按鈕。此時有一個新的需求就是增加審核和批量審核,并且也增加對應的權限。
添加按鈕
先不寫功能,在對應的位置上加上審核按鈕。在頂頭位置的批量審核需要得到的樣式如下:
原先的創(chuàng)建按鈕方法為:
{:build_toolbar("refresh,edit,checkall")}有時候不使用buid_toolbar來創(chuàng)建按鈕,而是直接使用的
title="{:__("Delete")}" >
{:__("Delete")}這種方式來創(chuàng)建按鈕,這樣雖然很直觀,但是實際上使用卻很不方便,因為這里對于權限的判定可能是有問題的。期待的結(jié)果是直接使用build_toolbar方法,設置checkall為批量審核,check為審核方法,對于各個權限組可以直接調(diào)用。
修改build_toolbar方法到如下結(jié)果:function build_toolbar($btns = NULL, $attr = []) { $auth = appadminlibraryAuth::instance(); $controller = str_replace(".", "/", strtolower(thinkRequest::instance()->controller())); $btns = $btns ? $btns : ["refresh", "add", "edit", "del", "import","checkall"]; $btns = is_array($btns) ? $btns : explode(",", $btns); $index = array_search("delete", $btns); if ($index !== FALSE) { $btns[$index] = "del"; } $btnAttr = [ "refresh" => ["javascript:;", "btn btn-primary btn-refresh", "fa fa-refresh", "", __("Refresh")], "checkall"=> ["javascript:;", "btn btn-success btn-checkall btn-disabled disabled", "fa fa-flag-checkered", " 批量審核", "批量審核"], "add" => ["javascript:;", "btn btn-success btn-add", "fa fa-plus", __("Add"), __("Add")], "edit" => ["javascript:;", "btn btn-success btn-edit btn-disabled disabled", "fa fa-pencil", __("Edit"), __("Edit")], "del" => ["javascript:;", "btn btn-danger btn-del btn-disabled disabled", "fa fa-trash", __("Delete"), __("Delete")], "import" => ["javascript:;", "btn btn-danger btn-import", "fa fa-upload", __("Import"), __("Import")], ]; $btnAttr = array_merge($btnAttr, $attr); $html = []; foreach ($btns as $k => $v) { //如果未定義或沒有權限 if (!isset($btnAttr[$v]) || ($v !== "refresh" && !$auth->check("{$controller}/{$v}"))) { continue; } list($href, $class, $icon, $text, $title) = $btnAttr[$v]; $extend = $v == "import" ? "id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"" : ""; $html[] = " " . $text . ""; } return implode(" ", $html); }具體修改的就是兩個地方,第一個是數(shù)組$btns,在$btns數(shù)組中添加需要的元素,在本例中添加checkall;第二就是修改$btnAttr,根據(jù)需要添加一個checkall元素,如下所示:
"checkall"=> ["javascript:;", "btn btn-success btn-checkall
btn-disabled disabled", "fa fa-flag-checkered", " 批量審核", "批量審核"],這里有需要特別注意的地方是,最好在類中加上btn-disabled disabled兩個class,這樣可以方便直接獲取是否選擇。也就是說,在沒有選擇項的情況下,所有批量操作的按鈕都應該是不能點擊的。
在修改完buildtoolbar之后在頁面上使用應該就是可以直接調(diào)用出來了,到此第一步完成。修改js配置
接下來修改require-table.js文件,因為所有的后臺js文件都繼承了這個文件,如果用的編輯器或IDE沒有歷史記錄功能那就一定要做好備份。
首先是配置項,extend項代表每個url對應的方法,這里可以設置成缺省為空,然后在需要用到的js文件中再調(diào)用。加上checkall和check的URL,最好命名一致,修改完成的extend如下: extend: { index_url: "", add_url: "", edit_url: "", del_url: "", import_url: "", multi_url: "", check_url:"", checkall_url:"", check_classes_url:"", dragsort_url: "ajax/weigh", }只需要按自己的需求把想加的公共方法加上,在config中添加按鈕對應的class,比如這里添加:
checkallbtn: ".btn-checkall",綁定事件
在bindevent中添加事件如下:// 批量審核按鈕事件 $(toolbar).on("click", Table.config.checkallbtn, function () { var that = this; var ids = Table.api.selectedids(table); layer.msg("您正在批量修改審核狀態(tài),請選擇結(jié)果", { time: 20000, //20s后自動關閉 btn: ["通過", "不通過", "取消"] ,yes: function(index){ $(this).data({"check":1,"tablename":"classes"}); Table.api.multi("checkall", ids, table, $(this)); Layer.close(index); } ,btn2: function(index){ $(this).data({"check":2,"tablename":"classes"}); Table.api.multi("checkall", ids, table, $(this)); Layer.close(index); } ,btn3: function(index){ Layer.close(index); } }); });其中Table.config.checkallbtn即之前在config中添加的按鈕,其中綁定的類名必須在之前的buildtollbar的對應按鈕上有,根據(jù)需求,這里設置一個彈窗,以點擊通過為例:
鼠標選擇幾項結(jié)果之后進行批量審核,如果選擇通過,對應回調(diào)yes,此時設置兩個數(shù)據(jù),一個是對應的表,一個是審核狀態(tài)。因為主要是classes表會用到審核,默認值設置為classes表,如果其他方法調(diào)用,可以在對應的js文件中重寫綁定事件;(還有另一種方法,config中添加一項為tablename,然后直接傳tablename,將對應的classes修改為Table.config.tablename,每次頁面js調(diào)用的時候修改config,但是因為大部分頁面用不著重寫config,因此這里不這么寫)
multi方法即批量操作方法,因此這里應該直接調(diào)用,在multi方法中有以下的一句:
var url = typeof data.url !== "undefined" ? data.url : (action == "del" ? options.extend.del_url : options.extend.multi_url);這里要注意的是,在js調(diào)用的時候打印url,可能審核方法不在,因為實際上multi方法是綁定到dek_url或者multi_url的,這里有兩種方法,一種是把check_url替換上去,一種是直接把multi_url方法綁定到check上,也可以直接加上,但是這個判斷就要改。
具體js
進入到控制器對應的js中調(diào)用方法,如果寫在trait中,每個控制器都會直接繼承,如果使用的地方較少,可以直接使用。地址是admin/library/traits/Backend.php
checkall方法如下:/** * * 批量審核 */ public function checkall($ids = "") { $row = $this->model->get($ids); if (!$row) $this->error(__("No Results were found")); $adminIds = $this->getDataLimitAdminIds(); if (is_array($adminIds)) { if (!in_array($row[$this->dataLimitField], $adminIds)) { $this->error(__("You have no permission")); } } if ($this->request->isPost()) { $values = $this->request->post()["params"]; if($values) { $res =Db::name($values["tablename"])->where("id","IN",$ids)->update(["check"=>$values["check"]]); $this->success(); } } }其中$this->request->post()["params"]可以獲取到剛才在js中傳遞的數(shù)據(jù),這里是用戶選擇的審核狀態(tài)和需要更新的表名;之后對表進行操作返回$this->success()就可以了;
添加權限
以上操作順利完成之后顯示的會是沒有操作權限;首先進入規(guī)則管理,添加剛才新增的方法對應的規(guī)則,例如這里添加的是check:只要不以菜單方式顯示,然后狀態(tài)正常就可以了;
之后進入角色組,在角色組對應的權限中勾選,此時就可以加上對應的權限,這是很重要的一步:**接下來在index頁面中加上驗證就行,例如這里是: data-operate-check="{:$auth->check("course/clabelong/check")}" data-operate-checkall="{:$auth->check("course/clabelong/checkall")}"**此時再登錄不同的用戶,例如教師組沒有批量審核權限,那么無法顯示批量審核按鈕。
單個操作權限
除了批量操作,其實還可以單個操作,單個操作和批量操作稍有不同,但是更簡單。可以仿照單元格元素事件來寫,結(jié)果如下:"click .btn-checkone": function (e, value, row, index) { e.stopPropagation(); e.preventDefault(); var table = $(this).closest("table"); var options = table.bootstrapTable("getOptions"); var ids = row[options.pk]; row = $.extend({}, row ? row : {}, {ids: ids}); var url = options.extend.check_url; Fast.api.open(Table.api.replaceurl(url, row, table), "審核", $(this).data() || {}); },直接綁定到check_url,在對應方法的js文件中的extend寫出check_url的位置,添加對應的方法和視圖,就可以直接調(diào)用。當然,同樣涉及到權限的問題,加了方法之后在index中依然要用data-operate-check="{:$auth->check("course/clabelong/check")}";同時,不要忘記在require-table.js中添加operate;我添加如下代碼:
if (options.extend.check_url !== "") { buttons.push({ name: "check", icon: "fa fa-flag-checkered", title: "審核", classname: "btn btn-xs btn-success btn-checkone", url: options.extend.check_url }); }在require-table中可能還有需要修改的地方,但是關鍵是按照原先的add.del等寫好的方法來參照,基本上就不會出錯了。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/95215.html
摘要:之前使用,自定義角色組,發(fā)現(xiàn)編輯刪除修改等等權限可以直接權限管理中選擇,然后用不同的角色登陸,會顯示對應的權限按鈕。期待的結(jié)果是直接使用方法,設置為批量審核,為審核方法,對于各個權限組可以直接調(diào)用。 之前使用fastadmin,自定義角色組,發(fā)現(xiàn)編輯/刪除/修改等等權限可以直接權限管理中選擇,然后用不同的角色登陸,會顯示對應的權限按鈕。此時有一個新的需求就是增加審核和批量審核,并且也增...
摘要:怎么查看后臺地址重新配置,保存地址,記住用戶名和密碼這就是后臺地址文件配置不能保存,取消文件只讀模式簡介即超文本預處理器,是一種通用開源腳本語言。自動生成的注釋,非常方便進行大型編程。方便的部署,可以直接將代碼直接到服務器。 目錄 目錄 fastadmin不能登錄后臺 fastadmin偽...
摘要:前言虛擬資源管理平臺是在的基礎上開發(fā)的,從原有的一個用戶擴展成三個管理員用戶和普通用戶,下面簡單分析一下其實現(xiàn)權限管理的原理。 前言 虛擬資源管理平臺是在ovirt4.0的基礎上開發(fā)的,從原有的一個admin用戶擴展成三個管理員用戶和普通用戶,下面簡單分析一下其實現(xiàn)權限管理的原理。 數(shù)據(jù)庫表 主要包括三張表:roles(角色表)、roles_group(角色與操作組關系表)、permi...
摘要:第二種通過數(shù)據(jù)卷掛載到容器如沒有能力或者不知道配置文件各項參數(shù),請盡可能少的加載自己的配置文件。注意目錄對應數(shù)據(jù)庫連接時請使用配置項中的名稱,,請安裝到本地配置文件含目錄結(jié)構請自行創(chuàng)建配置配置下載安裝做如下配置配置測試 Dockerfile 創(chuàng)建 FROM php:fpm-alpine MAINTAINER amor # 更新源 # ENV PHPREDIS_VERSION=3...
閱讀 2596·2023-04-25 15:07
閱讀 705·2021-11-24 10:21
閱讀 2299·2021-09-22 10:02
閱讀 3517·2019-08-30 15:43
閱讀 3222·2019-08-30 13:03
閱讀 2287·2019-08-29 17:18
閱讀 3586·2019-08-29 17:07
閱讀 1873·2019-08-29 12:27