Position: All -> PHP -> 运用位运算实现权限管理功能 | 08-06-01 12:13:43
Font-Size:
Large | Middle | Small

前两天上陆幼利的《windows程序设计》的时候看到了很多这样的函数:

C++代码
  1. CreateWindow(args...,WS_VISIBLE | WS_CHILD | BN_PUSHBUTTON);   
  2. MessageBox(args...,MB_OK | MS_QUESTION);   

可以看到,函数的某个参数可以接受形如c1 | c2 | c3的参数形式,从而达到并列这些条件的效果,就是说在有很多样式可以组合的前提下,你可以在不违反规则的情况下任意的组合几个条件,来并列显示他们的效果

觉得这种函数很神奇,上节课下课后专门去问了陆幼利,他说是由位运算完成的,而这些条件都是之前就已经define过的2的n次幂,做位或运算时相互不干扰

听后有了一点大概的感觉,今天刚好找到一个PHP代码,很好的解释了这一技巧,该程序将要通过位运算实现权限的组合

PHP代码
  1. <?php   
  2.     define("PUBLIC_ARTICLE",    1);        //发行文章   
  3.     define("CREATE_ARTICLE",    2);        //添加文章   
  4.     define("MODIFY_ARTICLE",    4);        //修改文章   
  5.     define("DELETE_ARTICLE",    8);        //删除文章   
  6.     define("SHARCH_ARTICLE",    16);        //搜索文章   
  7.     define("CREATE_COMMENT",    32);        //添加文章评论   
  8.     define("DELETE_COMMENT",    64);        //删除文章评论   
  9.   
  10.     //所有的权限   
  11.     $final_allow = PUBLIC_ARTICLE | CREATE_ARTICLE | MODIFY_ARTICLE 
  12.                  | DELETE_ARTICLE | SHARCH_ARTICLE | CREATE_COMMENT | DELETE_COMMENT;   
  13.   
  14.     echo "管理者拥有的全部权限:" .decbin($final_allow). "<br>";   
  15.   
  16.     $no_shearch_allow = $final_allow ^ SHARCH_ARTICLE;   
  17.     echo "仅无法搜索文章的权限:" .decbin($no_shearch_allow). "<br>";   
  18.   
  19.     //编辑人员独有的权限   
  20.     $editor_allow = PUBLIC_ARTICLE | MODIFY_ARTICLE | DELETE_ARTICLE;   
  21.     $no_editor_allow = $final_allow & ~$editor_allow;   
  22.     echo "非编辑人员所有的权限:" .decbin($no_editor_allow). "<br>";   
  23. ?>  

最终输出为:

管理者拥有的全部权限:1111111
仅无法搜索文章的权限:1101111
非编辑人员所有的权限:1110010

Comments:

淘宝网购物Jul 27th, 2010 at 1:51 am
#4
超猛
淘宝商城Jul 27th, 2010 at 1:51 am
#3
很猛
obeliskcgJun 1st, 2008 at 23:27 pm
#2
海猛
huoJun 1st, 2008 at 21:14 pm
#1
还猛

Add Comments: