嗯,事由是楼主之前看了@!dexter的帖子,
https://www.v2ex.com/t/95335,求PHP招聘什么的。 @!Sunyanzi 在里面说到做个Blog什么的,顺便实现个权限系统。然后 @!Ever 说1.5小时嗯,算算看面试也差不多这时间。
楼主一想,嗯?我最近不是要做这个么。。于是就想用这个机会去试试看嗯,心里想的很简单很简单,转换一个数组嘛,太简单了哇哈哈。。
我的需求是这样的:
权限储存在一个多维数组中。就像这样:
https://gist.github.com/raincious/8299003true==允许,false==不允许
然后需要将这个数组Shadow出一份存成平坦数组,用来做权限比较,以及输出给模板做权限判断什么的。这就需要将上面的例子变成。
array(
'setting.general' => false,
.....
'user.banned' => false,
);
同时还要允许变更其中的权限,因为用户组和用户可能会使用不同的权限之类。
需求定下来之后,心想,哇勒格X,这是小学生都会的嘛,给我15分钟搞定嗯~
于是欢快的打开了Sublime……
四小时后。。。
我已经不知道用啥心情写代码了,发现即使这么简单的模块也是坑巨多啊。
很明显的比如,其实光有'setting.general','setting.register'这些项是不够的,你还得有'setting'这个根项来判断用户是不是有权限访问下面的子项,否则输出给模板之后仍然得多次判断('setting.general' || 'setting.register' || ....)来确定用户是否能访问某个页面,以便显示或隐藏对应链接。
补好了上面的坑,发现这简直就是更大坑的入口。。。比如权限修改之后需要动态维护上面的关系。。。。
当然,好像我把事情给弄复杂了恩。。。
不过好在搞出了一个实(Bu)验(An)性(Quan)的模块,时间也没白浪费嗯。。。
实现的功能包括:
* 转换多维权限表到分级的平坦表。
* 可以导出权限以便保存。
代码:
https://github.com/raincious/could== 重点来了 ==
说到这里,楼主开始担心如果去其他公司面试,到时给来一题Blog,我自己就把自己坑不知道哪儿了。
所以,想问问有面试经验的,如果你是面试官,遇到我这样写程序的,请问你还要我么?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/96066
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.