其他分享
首页 > 其他分享> > Destoon后台权限-不给客户创始人权限并屏蔽部分功能

Destoon后台权限-不给客户创始人权限并屏蔽部分功能

作者:互联网

1、根目录下后台入口文件admin.php

$_founder = $CFG['founderid'] == $_userid ? $_userid : 0; // $CFG['founderid'] 是config.php里指定的网站创始人账户id配置项, $_founder 存储了创始人id, 如果不是创始人则$_founder为0;

(1) inc.php文件里可以通过if($_founder) 判断是否是创始人。

(2) 后台模板  tpl.php 里可以通过 <?php if($_founder){ ?> ......  <?php }?>

if ($module == 'destoon') { // 当无mid参数时 module 默认是 destoon 走这个分支
    (include DT_ROOT . '/admin/' . $file . '.inc.php') or msg();
} else { // 有mid参数时  走这个分支
    include DT_ROOT . '/module/' . $module . '/common.inc.php';
    (include MD_ROOT . '/admin/' . $file . '.inc.php') or msg();
}
// 当无moduleid参数时 module 默认是 destoon 走这个分支 例如 adminsiyi.php?action=start 其实加载的是
/admin / index . inc . php
// admin.php?mid=5&file=category 加载的是
/ admin / category . inc . php
// adminsiyi.php?moduleid=5 加载的是
/module/sell/common.inc.php
// 和
/module/sell/admin/index.inc.php
// 对应模板也在这个目录

2、后台左侧菜单加载文件 /admin/left.tpl.php 里边可以通过if(!$_founder) 分支加载普通管理员的菜单

3、admin / category.inc.php 隐藏顶部部分菜单, 更新地址,更新统计的作用

$menus = array(
    array('添加分类', '?file=' . $file . '&action=add&mid=' . $mid . '&parentid=' . $parentid),
    array('管理分类', '?file=' . $file . '&mid=' . $mid),
    array('分类复制', '?file=' . $file . '&action=copy&mid=' . $mid),
    array('批量索引', '?file=' . $file . '&action=letters&mid=' . $mid),
    array('更新地址', '?file=' . $file . '&action=url&mid=' . $mid),
    array('更新统计', '?file=' . $file . '&action=count&mid=' . $mid),
    array('更新缓存', '?file=' . $file . '&action=cache&mid=' . $mid),
);

改为

if ($_founder) {
    $menus = array(
        array('添加分类', '?file=' . $file . '&action=add&mid=' . $mid . '&parentid=' . $parentid),
        array('管理分类', '?file=' . $file . '&mid=' . $mid),
        array('分类复制', '?file=' . $file . '&action=copy&mid=' . $mid),
        array('批量索引', '?file=' . $file . '&action=letters&mid=' . $mid),
        array('更新地址', '?file=' . $file . '&action=url&mid=' . $mid),
        array('更新统计', '?file=' . $file . '&action=count&mid=' . $mid),
        array('更新缓存', '?file=' . $file . '&action=cache&mid=' . $mid),
    );
} else {
    $menus = array(
        array('添加分类', '?file=' . $file . '&action=add&mid=' . $mid . '&parentid=' . $parentid),
        array('管理分类', '?file=' . $file . '&mid=' . $mid),
        array('更新统计', '?file=' . $file . '&action=count&mid=' . $mid),
        array('更新缓存', '?file=' . $file . '&action=cache&mid=' . $mid),
    );
}

更新地址 category.inc.php 页面

$CATEGORY = cache_read('category-' . $mid . '.php');
case
'url':
    foreach ($CATEGORY as $c) {
        update_category($c);
    }
    $do->cache();
    dmsg('更新成功', "?mid=$mid&file=$file");
    break;
// update_category 在 admin/global.func.php 中定义
function update_category($CAT)
{
    global $db, $DT;
    $linkurl = listurl($CAT);
    if ($DT['index']) $linkurl = str_replace($DT['index'] . '.' . $DT['file_ext'], '', $linkurl);
    $db->query("UPDATE {&#36;db->pre}category SET linkurl='$linkurl' WHERE catid=" . $CAT['catid']);
}
// listurl函数在根目录下的global.func.php定义
function listurl($CAT, $page = 0)
{
    global $DT, $MOD, $L;
    include DT_ROOT . '/api/url.inc.php';
    $catid = $CAT['catid'];
    $file_ext = $DT['file_ext'];
    $index = $DT['index'];
    $catdir = $CAT['catdir'];
    $catname = file_vname($CAT['catname']);
    $prefix = $MOD['htm_list_prefix'];
    $urlid = $MOD['list_html'] ? $MOD['htm_list_urlid'] : $MOD['php_list_urlid'];
    $ext = $MOD['list_html'] ? 'htm' : 'php';
    isset($urls[$ext]['list'][$urlid]) or $urlid = 0;
    $url = $urls[$ext]['list'][$urlid];
    $url = $page ? $url['page'] : $url['index'];
    eval("\$listurl = \"$url\";");
    if (substr($listurl, 0, 1) == '/') {
        $listurl = substr($listurl, 1);
    }
    return $listurl;
}
// 当修改链接模式是需要生成一下分类链接

4、非创始人后台界面,左侧菜单名称用模型名称不合适时

左侧菜单 admin/tempalte/left.tpl.php 找xx管理 改为 xx管理 现货铜管理 改为 现货管理

我去 突然发现我的面板名称可以在权限管理修改 系统设置-》管理员管理-》普通管理员 权限面板

还可以增加一项

以下方法用不到了

<dl>
    <!--<dt onclick="s(this)" onm ouseover="this.className='dt_on';"onmouseout="this.className='';">我的面板</dt>-->
    <!--<dd onclick="c(this);"><a href="?action=main">系统首页</a></dd>-->
    <!--<dd onclick="c(this);"><a href="?file=mymenu">定义面板</a></dd>-->
    <?php
 function repalcecaidan($str){
 $str=str_replace("找","",$str); // 找产品管理->产品管理
    $str=str_replace("通","",$str);
    return $str;
    }
    foreach($mymenu as $menu) { ?>
    <dd onclick="c(this);">
        <a href="<?php echo substr($menu['url'], 0, 1) == '?' ? $menu['url'] : DT_PATH.'api/redirect.php?url='.$menu['url'].'"
           target="_blank';?>">
            <i class="icon-double-angle-right"></i>
            <?php echo set_style(repalcecaidan($menu['title']), $menu['style']);?>
        </a>
    </dd>
    <?php } ?>
</dl>

5、后台左侧菜单和顶部标签定义位置: 红色部分左侧菜单  ,蓝色部分顶部标签菜单 

(1)红色部分左侧菜单 在对应模块的admin/menu.inc.php文件 (如供应在module/sell/admin/menu.inc.php)

(2)蓝色部分顶部标签菜单  在 对应页面中定义 例如 供应管理首页(列表页面) 在module/sell/admin/index.inc.php 中

如 隐藏 移动分类

if ($_founder) {
    $menus = array(
        array('添加' . $MOD['name'], '?moduleid=' . $moduleid . '&action=add'),
        array($MOD['name'] . '列表', '?moduleid=' . $moduleid),
        array('审核' . $MOD['name'], '?moduleid=' . $moduleid . '&action=check'),
        array('过期' . $MOD['name'], '?moduleid=' . $moduleid . '&action=expire'),
        array('未通过' . $MOD['name'], '?moduleid=' . $moduleid . '&action=reject'),
        array('回收站', '?moduleid=' . $moduleid . '&action=recycle'),
        array('移动分类', '?moduleid=' . $moduleid . '&action=move'),
    );
} else {
    $menus = array(
        array('添加' . $MOD['name'], '?moduleid=' . $moduleid . '&action=add'),
        array($MOD['name'] . '列表', '?moduleid=' . $moduleid),
        array('审核' . $MOD['name'], '?moduleid=' . $moduleid . '&action=check'),
        array('过期' . $MOD['name'], '?moduleid=' . $moduleid . '&action=expire'),
        array('未通过' . $MOD['name'], '?moduleid=' . $moduleid . '&action=reject'),
        array('回收站', '?moduleid=' . $moduleid . '&action=recycle'),
    );
}

6、修改后台列表页面搜索项目和排序项目,精简关键词选项和排序结果选项

对应目录下 index.inc.php (如供应在module/sell/admin/index.inc.php)

if ($_founder) {
    $sfields = array('模糊', '标题', '产品品牌', '计量单位', '简介', '公司名', '联系人', '联系电话', '联系地址', '电子邮件', '联系MSN', '联系QQ', '会员名', '编辑', 'IP', '参数名1', '参数名2', '参数名3', '参数值1', '参数值2', '参数值3', '文件路径', '内容模板');
    $dfields = array('keyword', 'title', 'brand', 'unit', 'introduce', 'company', 'truename', 'telephone', 'address', 'email', 'msn', 'qq', 'username', 'editor', 'ip', 'n1', 'n2', 'n3', 'v1', 'v2', 'v3', 'filepath', 'template');
    $sorder = array(
        '结果排序方式', '更新时间降序', '更新时间升序', '添加时间降序', '添加时间升序', VIP . '级别降序', VIP . '级别升序', '产品单价降序', '产品单价升序', '供货总量降序', '供货总量升序', '最小起订降序', '最小起订升序', '浏览次数降序', '浏览次数升序', '信息ID降序', '信息ID升序'
    );
    $dorder = array($MOD['order'], 'edittime DESC', 'edittime ASC', 'addtime DESC', 'addtime ASC', 'vip DESC', 'vip ASC', 'price DESC', 'price ASC', 'amount DESC', 'amount ASC', 'minamount DESC', 'minamount ASC', 'hits DESC', 'hits ASC', 'itemid DESC', 'itemid ASC');
} else {
    $sfields = array('模糊', '标题', '公司名');
    $dfields = array('keyword', 'title', 'company');
    $sorder = array(
        '结果排序方式', '更新时间降序', '更新时间升序', '添加时间降序', '添加时间升序', VIP . '级别降序', VIP . '级别升序', '产品单价降序', '产品单价升序', '浏览次数降序', '浏览次数升序', '信息ID降序', '信息ID升序'
    );
    $dorder = array($MOD['order'], 'edittime DESC', 'edittime ASC', 'addtime DESC', 'addtime ASC', 'vip DESC', 'vip ASC', 'price DESC', 'price ASC', 'hits DESC', 'hits ASC', 'itemid DESC', 'itemid ASC');
}

7、非创始人管理员点击回收站回复 这些按钮时提示无权限的解决方法

// admin入口文件 admin.php 
if ($file != 'login') { // 不是登陆页面
    if ($_groupid != 1 || $_admin < 1 || !$_destoon_admin) msg('', '?file=login&forward=' . urlencode($DT_URL)); // 非后台管理员 $_admin 管理员类型 1-超级管理员,2-普通管理员。
    if (!admin_check()) {
        admin_log(1);
        $db->query("DELETE FROM {&#36;db->pre}admin WHERE userid=$_userid AND url='?" . $DT_QST . "'");
        msg('警告!您无权进行此操作 Error(00)');
    }
}
// admin_check()函数 admin/global.func.php 文件
function admin_check()
{
    global $CFG, $db, $_admin, $_userid, $moduleid, $file, $action, $catid, $_catids, $_childs;
    if (in_array($file, array('logout', 'cloud', 'mymenu', 'search', 'ip', 'mobile'))) return true; // All user
    if ($moduleid == 1 && $file == 'index') return true; // 在根目录common.inc.php  $moduleid = isset($moduleid) ? intval($moduleid) : 1; 没有$moduleid参数时 $moduleid=1
    if ($CFG['founderid'] && $CFG['founderid'] == $_userid) return true; // Founder创始人有全部权限
    if ($_admin == 2) { // $_admin 管理员类型 1-超级管理员,2-普通管理员。
        $R = cache_read('right-' . $_userid . '.php');
        if (!$R) return false;
        if (!isset($R[$moduleid])) return false;
        if (!$R[$moduleid]) return true;//Module admin
        if (!isset($R[$moduleid][$file])) return false;
        if (!$R[$moduleid][$file]) return true;
        if ($action && $R[$moduleid][$file]['action'] && !in_array($action, $R[$moduleid][$file]['action'])) return false;
        if (!$R[$moduleid][$file]['catid']) return true;
        $_catids = implode(',', $R[$moduleid][$file]['catid']);
        if ($catid) {
            if (in_array($catid, $R[$moduleid][$file]['catid'])) return true;
//Childs
            $result = $db->query("SELECT catid,child,arrchildid FROM {&#36;db->pre}category WHERE moduleid=$moduleid AND catid IN ($_catids)");
            while ($r = $db->fetch_array($result)) {
                $_childs .= ',' . ($r['child'] ? $r['arrchildid'] : $r['catid']);
            }
            if (strpos($_childs . ',', ',' . $catid . ',') !== false) return true;
            return false;
        }
    } else if ($_admin == 1) {
        if (in_array($file, array('admin', 'setting', 'module', 'area', 'database', 'template', 'skin', 'log', 'update', 'group', 'fields', 'loginlog'))) return false; // Founder || Common Admin Only
    }
    return true;
}

8、图库管理隐藏级别和标题颜色以后 标题图片无法上传的解决方法,点上传按钮无反应

// 不能直接隐藏,在外层包含div 然后style=dispaly:none
<div <?php if(!$_founder){ ?> style="display:none" <?php } ?> >
<?php echo level_select('post[level]', '级别', $level, 'id="level"');?>
<?php echo dstyle('post[style]', $style);?>
</div>

9、destoon如何隐藏后台菜单 如 隐藏行情里的 行情审核 和 内容更新菜单

在 $menu 在对应模型/admin/menu.inc.php 如module/quote/admin/menu.inc.php 注释相应项目即可

$menu = array(
    array("添加" . $name, "?moduleid=$moduleid&action=add"),
    array($name . "列表", "?moduleid=$moduleid"),
    //array("审核".$name, "?moduleid=$moduleid&action=check"),
    array("分类管理", "?file=category&mid=$moduleid"),
    array("产品报价", "?moduleid=$moduleid&file=product"),
    //array("更新数据", "?moduleid=$moduleid&file=html"),
    array("模块设置", "?moduleid=$moduleid&file=setting"),
);
// 实现超级管理员与普通管理员左侧菜单不一样
if ($_username == "超级管理员用户名") {
    $menu = array(
        array("添加" . $name, "?moduleid=$moduleid&action=add"),
        array($name . "列表", "?moduleid=$moduleid"),
        array("审核" . $name, "?moduleid=$moduleid&action=check"),
        array("分类管理", "?file=category&mid=$moduleid"),
        array("产品报价", "?moduleid=$moduleid&file=product"),
        array("更新数据", "?moduleid=$moduleid&file=html"),
        array("模块设置", "?moduleid=$moduleid&file=setting"),
    );
} else {
    $menu = array(
        array("添加" . $name, "?moduleid=$moduleid&action=add"),
        array($name . "列表", "?moduleid=$moduleid"),
        array("分类管理", "?file=category&mid=$moduleid"),
        array("线材行情", "?moduleid=$moduleid&file=product"),
    );
}

标签:Destoon,mid,屏蔽,file,action,array,权限,php,moduleid
来源: https://blog.csdn.net/withoutfear/article/details/114289597