国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

fastadmin根據(jù)角色組設(shè)置權(quán)限

Yu_Huang / 1904人閱讀

摘要:之前使用,自定義角色組,發(fā)現(xiàn)編輯刪除修改等等權(quán)限可以直接權(quán)限管理中選擇,然后用不同的角色登陸,會(huì)顯示對(duì)應(yīng)的權(quán)限按鈕。期待的結(jié)果是直接使用方法,設(shè)置為批量審核,為審核方法,對(duì)于各個(gè)權(quán)限組可以直接調(diào)用。

之前使用fastadmin,自定義角色組,發(fā)現(xiàn)編輯/刪除/修改等等權(quán)限可以直接權(quán)限管理中選擇,然后用不同的角色登陸,會(huì)顯示對(duì)應(yīng)的權(quán)限按鈕。此時(shí)有一個(gè)新的需求就是增加審核和批量審核,并且也增加對(duì)應(yīng)的權(quán)限。


添加按鈕

先不寫(xiě)功能,在對(duì)應(yīng)的位置上加上審核按鈕。在頂頭位置的批量審核需要得到的樣式如下:

原先的創(chuàng)建按鈕方法為:

{:build_toolbar("refresh,edit,checkall")}

有時(shí)候不使用buid_toolbar來(lái)創(chuàng)建按鈕,而是直接使用的

 

title="{:__("Delete")}" >
{:__("Delete")}

這種方式來(lái)創(chuàng)建按鈕,這樣雖然很直觀,但是實(shí)際上使用卻很不方便,因?yàn)檫@里對(duì)于權(quán)限的判定可能是有問(wèn)題的。期待的結(jié)果是直接使用build_toolbar方法,設(shè)置checkall為批量審核,check為審核方法,對(duì)于各個(gè)權(quán)限組可以直接調(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) {
            //如果未定義或沒(méi)有權(quán)限
            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);
    }
                

具體修改的就是兩個(gè)地方,第一個(gè)是數(shù)組$btns,在$btns數(shù)組中添加需要的元素,在本例中添加checkall;第二就是修改$btnAttr,根據(jù)需要添加一個(gè)checkall元素,如下所示:

"checkall"=> ["javascript:;", "btn btn-success btn-checkall
btn-disabled disabled", "fa fa-flag-checkered", " 批量審核", "批量審核"],

這里有需要特別注意的地方是,最好在類(lèi)中加上btn-disabled disabled兩個(gè)class,這樣可以方便直接獲取是否選擇。也就是說(shuō),在沒(méi)有選擇項(xiàng)的情況下,所有批量操作的按鈕都應(yīng)該是不能點(diǎn)擊的。
在修改完buildtoolbar之后在頁(yè)面上使用應(yīng)該就是可以直接調(diào)用出來(lái)了,到此第一步完成。


修改js配置

接下來(lái)修改require-table.js文件,因?yàn)樗械暮笈_(tái)js文件都繼承了這個(gè)文件,如果用的編輯器或IDE沒(méi)有歷史記錄功能那就一定要做好備份。

首先是配置項(xiàng),extend項(xiàng)代表每個(gè)url對(duì)應(yīng)的方法,這里可以設(shè)置成缺省為空,然后在需要用到的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中添加按鈕對(duì)應(yīng)的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),請(qǐng)選擇結(jié)果", {
        time: 20000, //20s后自動(dòng)關(guān)閉
        btn: ["通過(guò)", "不通過(guò)", "取消"]
        ,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中添加的按鈕,其中綁定的類(lèi)名必須在之前的buildtollbar的對(duì)應(yīng)按鈕上有,根據(jù)需求,這里設(shè)置一個(gè)彈窗,以點(diǎn)擊通過(guò)為例:
鼠標(biāo)選擇幾項(xiàng)結(jié)果之后進(jìn)行批量審核,如果選擇通過(guò),對(duì)應(yīng)回調(diào)yes,此時(shí)設(shè)置兩個(gè)數(shù)據(jù),一個(gè)是對(duì)應(yīng)的表,一個(gè)是審核狀態(tài)。因?yàn)橹饕莄lasses表會(huì)用到審核,默認(rèn)值設(shè)置為classes表,如果其他方法調(diào)用,可以在對(duì)應(yīng)的js文件中重寫(xiě)綁定事件;(還有另一種方法,config中添加一項(xiàng)為tablename,然后直接傳tablename,將對(duì)應(yīng)的classes修改為T(mén)able.config.tablename,每次頁(yè)面js調(diào)用的時(shí)候修改config,但是因?yàn)榇蟛糠猪?yè)面用不著重寫(xiě)config,因此這里不這么寫(xiě))
multi方法即批量操作方法,因此這里應(yīng)該直接調(diào)用,在multi方法中有以下的一句:
var url = typeof data.url !== "undefined" ? data.url : (action == "del" ? options.extend.del_url : options.extend.multi_url);

這里要注意的是,在js調(diào)用的時(shí)候打印url,可能審核方法不在,因?yàn)閷?shí)際上multi方法是綁定到dek_url或者multi_url的,這里有兩種方法,一種是把check_url替換上去,一種是直接把multi_url方法綁定到check上,也可以直接加上,但是這個(gè)判斷就要改。

具體js
進(jìn)入到控制器對(duì)應(yīng)的js中調(diào)用方法,如果寫(xiě)在trait中,每個(gè)控制器都會(huì)直接繼承,如果使用的地方較少,可以直接使用。地址是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ù),這里是用戶(hù)選擇的審核狀態(tài)和需要更新的表名;之后對(duì)表進(jìn)行操作返回$this->success()就可以了;

添加權(quán)限
以上操作順利完成之后顯示的會(huì)是沒(méi)有操作權(quán)限;首先進(jìn)入規(guī)則管理,添加剛才新增的方法對(duì)應(yīng)的規(guī)則,例如這里添加的是check:

只要不以菜單方式顯示,然后狀態(tài)正常就可以了;
之后進(jìn)入角色組,在角色組對(duì)應(yīng)的權(quán)限中勾選,此時(shí)就可以加上對(duì)應(yīng)的權(quán)限,這是很重要的一步:

**接下來(lái)在index頁(yè)面中加上驗(yàn)證就行,例如這里是:
data-operate-check="{:$auth->check("course/clabelong/check")}"
data-operate-checkall="{:$auth->check("course/clabelong/checkall")}"**

此時(shí)再登錄不同的用戶(hù),例如教師組沒(méi)有批量審核權(quán)限,那么無(wú)法顯示批量審核按鈕。

單個(gè)操作權(quán)限
除了批量操作,其實(shí)還可以單個(gè)操作,單個(gè)操作和批量操作稍有不同,但是更簡(jiǎn)單。可以仿照單元格元素事件來(lái)寫(xiě),結(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,在對(duì)應(yīng)方法的js文件中的extend寫(xiě)出check_url的位置,添加對(duì)應(yīng)的方法和視圖,就可以直接調(diào)用。當(dāng)然,同樣涉及到權(quán)限的問(wèn)題,加了方法之后在index中依然要用data-operate-check="{:$auth->check("course/clabelong/check")}";同時(shí),不要忘記在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中可能還有需要修改的地方,但是關(guān)鍵是按照原先的add.del等寫(xiě)好的方法來(lái)參照,基本上就不會(huì)出錯(cuò)了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/30813.html

相關(guān)文章

  • fastadmin根據(jù)角色設(shè)置權(quán)限

    摘要:之前使用,自定義角色組,發(fā)現(xiàn)編輯刪除修改等等權(quán)限可以直接權(quán)限管理中選擇,然后用不同的角色登陸,會(huì)顯示對(duì)應(yīng)的權(quán)限按鈕。期待的結(jié)果是直接使用方法,設(shè)置為批量審核,為審核方法,對(duì)于各個(gè)權(quán)限組可以直接調(diào)用。 之前使用fastadmin,自定義角色組,發(fā)現(xiàn)編輯/刪除/修改等等權(quán)限可以直接權(quán)限管理中選擇,然后用不同的角色登陸,會(huì)顯示對(duì)應(yīng)的權(quán)限按鈕。此時(shí)有一個(gè)新的需求就是增加審核和批量審核,并且也增...

    Vicky 評(píng)論0 收藏0
  • FastAdmin 簡(jiǎn)介

    摘要:怎么查看后臺(tái)地址重新配置,保存地址,記住用戶(hù)名和密碼這就是后臺(tái)地址文件配置不能保存,取消文件只讀模式簡(jiǎn)介即超文本預(yù)處理器,是一種通用開(kāi)源腳本語(yǔ)言。自動(dòng)生成的注釋?zhuān)浅7奖氵M(jìn)行大型編程。方便的部署,可以直接將代碼直接到服務(wù)器。 目錄 目錄 fastadmin不能登錄后臺(tái) fastadmin偽...

    JiaXinYi 評(píng)論0 收藏0
  • ovirt筆記:基于ovirt4.0的虛擬資源管理的權(quán)限分析

    摘要:前言虛擬資源管理平臺(tái)是在的基礎(chǔ)上開(kāi)發(fā)的,從原有的一個(gè)用戶(hù)擴(kuò)展成三個(gè)管理員用戶(hù)和普通用戶(hù),下面簡(jiǎn)單分析一下其實(shí)現(xiàn)權(quán)限管理的原理。 前言 虛擬資源管理平臺(tái)是在ovirt4.0的基礎(chǔ)上開(kāi)發(fā)的,從原有的一個(gè)admin用戶(hù)擴(kuò)展成三個(gè)管理員用戶(hù)和普通用戶(hù),下面簡(jiǎn)單分析一下其實(shí)現(xiàn)權(quán)限管理的原理。 數(shù)據(jù)庫(kù)表 主要包括三張表:roles(角色表)、roles_group(角色與操作組關(guān)系表)、permi...

    Gilbertat 評(píng)論0 收藏0
  • docker實(shí)戰(zhàn)之安裝fastadmin

    摘要:第二種通過(guò)數(shù)據(jù)卷掛載到容器如沒(méi)有能力或者不知道配置文件各項(xiàng)參數(shù),請(qǐng)盡可能少的加載自己的配置文件。注意目錄對(duì)應(yīng)數(shù)據(jù)庫(kù)連接時(shí)請(qǐng)使用配置項(xiàng)中的名稱(chēng),,請(qǐng)安裝到本地配置文件含目錄結(jié)構(gòu)請(qǐng)自行創(chuàng)建配置配置下載安裝做如下配置配置測(cè)試 Dockerfile 創(chuàng)建 FROM php:fpm-alpine MAINTAINER amor # 更新源 # ENV PHPREDIS_VERSION=3...

    sumory 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<