文档章节

web后台根据权限控制按钮显示/隐藏的方案

dubox
 dubox
发布于 2017/12/29 14:53
字数 388
阅读 26
收藏 0

      上午朋友问我一个问题:他用ajax 请求服务端判断权限,根据服务端返回来隐藏没有权限的按钮,这样有一个问题就是页面加载后按钮会闪一下。

       这个问题我很自然的就想到:那就把按钮默认都隐藏,ajax 判断完之后再显示有权限的按钮。。。

       这是一个成本比较低的办法,但不是个好办法。

       吃完饭后,我又想了一下这个问题,想到了一个还不错的办法:

在项目的公共头加一个外部 css,连接到一个后端地址 如:

<head>

<link rel="stylesheet" type="text/css" href="/getCssForAuth.php" >
</head>

在 getCssForAuth.php 中将当前用户的所有权限 和按钮的 class 对应,输出一段 css 来控制按钮的显示和隐藏。

这个方案也并不复杂,却有两个好处:

1.不用在每个页面写 ajax 请求;

2.浏览器会缓存 css ,减少请求;

同时因为浏览器缓存 所以要注意一个问题:css 被缓存后,如果权限有更新或者切换账户时 css 不能更新!

这个问题也很简单,只需要每次登录的时候生成一个随机 QueryString 加到 css 链接后面就行了:

<head>

<link rel="stylesheet" type="text/css" href="/getCssForAuth.php?w56yi9jtg45" >
</head>

 

还有一个小点要注意一下,就是服务端输出 css 需要加 content-type,PHP 中使用 header即可:

<?

header('Content-type: text/css');

?>

 

© 著作权归作者所有

共有 人打赏支持
dubox
粉丝 3
博文 90
码字总数 25222
作品 0
西安
程序员
关于纯HTML前台和JFinal后台的问题

类似后台管理系统的应用(登录,首页,各种功能模块,各种统计,各种增删改查)。 要求纯HTML前台页面,后台使用JFinal提供API,前后台交互使用JQuery的ajax方法(统一ajax错误处理),交互的...

负心杏
2015/09/23
1K
3
web工作流管理系统开发之十二 同一张表单在流程多节点中流转的权限控件

以前写过一篇 表单权限与流程的权限控制;文章,没有具体的去实现,实践证明,同一张表单在多流程节点中流转,是工作流和电子表单必须要处理的问题。 工作流系统和电子表单相结合,达到同一张...

长平狐
2012/10/11
264
0
vue项目实践-前后端分离关于权限的思路

前后端分离后权限的思路 最近看到许多关于权限的思路,但好像都是使用动态加载路由的方式,现在也分享下我在项目中使用的解决方案。 前后端分离关于权限的处理每个人都不一样,根据项目选择制...

易墨
07/29
0
0
yii2 rbac权限控制之菜单menu详细教程

作者:白狼 出处:http://www.manks.top/yii2rbacmenu.html本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 ...

白狼栈
2016/04/28
140
0
React体系前端权限控制方案

在做商家后台管理系统时,作为前端通常会设计到大量的权限控制问题,按照细粒度归归类大致可以分类以下三类 页面权限 模块权限-页面区块(组件)是否显示 元件权限-组件内元素是否显示 以往的...

amibug
07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ZOOKEEPER安装记录

本文借鉴了链接的内容,但是有几部分需要注意: 下载zookeeper的位置是:连接; 执行这两部,得再root下,sudo不能用,还不知道为啥。

恰东
刚刚
0
0
解决你的无线路由器被蹭网烦恼

教你几招提高无线路由器的安全性-再也不用担心蹭网了。随着无线网络的普及,无线网络的安全问题越来越严重。本文教你几招提高家用无线路由器的安全性,再也不用担心蹭网了。 随着无线网络的普...

linuxprobe16
5分钟前
0
0
分布式系统消息中间件—RabbitMQ的使用进阶篇

前言: 这篇文章主要总结一下RabbitMQ在日常项目开发中比较常用的几个特性。 一。 mandatory 参数 上一篇文章中我们知道,生产者将消息发送到RabbitMQ的交换器中通过RoutingKey与BindingKey的...

Java干货分享
5分钟前
0
0
RabbitMQ清除队列中的所有消息

最近在研究 RabbitMQ 消息队列,安装好进行测试的时候发觉在一个名为 MyRabbitMQ 的消息队列中已经插入了大量的数据。 最后不得不找方法清除。 linux或者windows 输入命令: rabbitmqctl li...

覃大光
9分钟前
0
0
java equals和==的区别

public class StaticDemo { public static void main(String[] args) { /** * 1、包装类的“==”运算在未遇到算术运算的情况下不会自动拆箱(堆中存储的地址是否相同,即栈中的内容是否相同)...

恋码之子
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部