Typecho Access 插件优化

修复的Bug

0x01 -- 删除按钮失效

截图就忘了,点击删除的时候会提示选中,实际上是已经选中的状态。

把删除部分代码改成如下所示,大概在299行,因为我魔改和格式化过,可能有点差异,但是搜索【删除】字样,应该就八九不离十了。

$('.dropdown-menu a[data-action="delete"]').click(function() {
            swal({
                title: '你确定?',
                icon: "info",
                text: '你确认要删除这些记录吗?',
                icon: "warning",
                buttons: {
                    confirm: {
                        text: "删除",
                    },
                    cancel: {
                        text: "我再想想",
                        visible: true,
                    }
                },
                dangerMode: true,
            }).then((confirm) => {
                if (confirm == true) {
                    var ids = [];
                    $('.typecho-list-table input[type="checkbox"]').each(function(index, elem) {
                        if (elem.checked) {
                            ids.push($(elem).data('id'));
                        }
                    });

                    if (ids.length == 0) {
                        return swal('错误', '你并没有勾选任何内容', 'warning');
                    }
                    $.ajax({
                        url: '<?php echo rtrim(Helper::options()->index, '/') . '/access/log/delete.json'; ?>',
                        method: 'post',
                        dataType: 'json',
                        contentType: 'application/json',
                        data: JSON.stringify(ids),
                        success: function(data) {
                            if (data.code == 0) {
                                swal('删除成功', '所选记录已删除', 'success');
                                $.each(ids, function(index, elem) {
                                    $('.typecho-list-table tbody tr[data-id="' + elem + '"]').fadeOut(500).remove();
                                });
                            } else {
                                swal('错误', '发生错误了', 'warning');
                            }
                        }
                    });
                }
            });
            var $this = $(this);
            $this.parents('.dropdown-menu').hide().prev().removeClass('active');
        });

0x002 权限问题

如果不希望普通用户可以查看Access记录,只允许管理员权限访问,修改第25行。原来的叫什么我忘了,我喜欢这样命名。后面改成administrator。这样就是管理员权限才会在[控制台]中显示。

Helper::addPanel(1, self::$panel, _t('访问控制台'), _t('Access插件控制台'), 'administrator');

首页中还存在一个入口,方法名是adminFooter,里面内容改成如下所示。

public static function adminFooter() {
    $access = new Access_Core();
        $url = $_SERVER['PHP_SELF'];
        $filename = substr($url, strrpos($url, '/') + 1);
        if ($filename == 'index.php' &&  $access->isAdmin())  {
            echo '<script>
            $(document).ready(function() {
            $("#start-link").append("<li><a href=\"';
                    Helper::options()->adminUrl('extending.php?panel=' . self::$panel);
                echo '\">' . _t('Access控制台') . '</a></li>");
            });
        </script>';
        });
    }

这样的话就是管理员才能显示,其他用户不会显示。

然而我也不知道其他用户直接通过URL能否访问,也没有测试,直接加了个校验,不是管理员就抛出异常。在console.php中加入下面的代码,一定要放在在$access定义之后嗷。如果不想让别人知道有这个插件,可以直接重定向到404页面。

<?php
            if (!$access->isAdmin()) {
                throw new Exception("仅限管理员查阅。");
            }
?>

评论 0

还没有评论,来说点什么吧。

提交后需要审核才会公开。