上午朋友问我一个问题:他用ajax 请求服务端判断权限,根据服务端返回来隐藏没有权限的按钮,这样有一个问题就是页面加载后按钮会闪一下。
这个问题我很自然的就想到:那就把按钮默认都隐藏,ajax 判断完之后再显示有权限的按钮。。。
这是一个成本比较低的办法,但不是个好办法。
吃完饭后,我又想了一下这个问题,想到了一个还不错的办法:
在项目的公共头加一个外部 css,连接到一个后端地址 如:
在 getCssForAuth.php 中将当前用户的所有权限 和按钮的 class 对应,输出一段 css 来控制按钮的显示和隐藏。
这个方案也并不复杂,却有两个好处:
1.不用在每个页面写 ajax 请求;
2.浏览器会缓存 css ,减少请求;
同时因为浏览器缓存 所以要注意一个问题:css 被缓存后,如果权限有更新或者切换账户时 css 不能更新!
这个问题也很简单,只需要每次登录的时候生成一个随机 QueryString 加到 css 链接后面就行了:
还有一个小点要注意一下,就是服务端输出 css 需要加 content-type,PHP 中使用 header即可:
header('Content-type: text/css');
?>