php后台多用户权限组思路与实现程序代码
网站开发少不了有网站后台,有了后台自然要对用户有同角色来分配一下,特别是多用户系统的情况下,如我一个系统要有多个管理员,那么我这些管理要分成,编辑,友情连接,管理员等,那我们要有权限和角色分配,今天我们就来看我以前做的一个系统吧.
先介绍一下文件:
adminconfig.php 这是后台系统中所有文件权限配置。
fun.php 这是一个功能函数
left.php 网站后台根据用户登录的ID来加载相对应的功能菜单
op.php 调用adminconfig.php 默认权限文件
opsava.php 保存用户权限成一个php文件
好了我们先来看看 fun.php文件吧,代码如下:
<?php function findsub( $keys , $userid = 'abc' ) //此函数重要就是为了调用用户的权限信息 { include ( 'user/' . $userid . '.php' ); foreach ( $bb as $key => $submenu ) { foreach ( $submenu as $subkey => $menuitem ) { if ( $subkey == $keys ) { return 1; } } } } //下面为生成用户的php权限文件 //写入 function cache_write( $name , $var , $values ) { $cachefile = 'op/user/' . $name . '.php' ; $cachetext = "<?phprn" . '$' . $var . '=' .arrayeval( $values ). "rn?>" ; if (!swritefile( $cachefile , $cachetext )) { exit ( "File: $cachefile write error." ); } } //数组转换成字串 function arrayeval( $array , $level = 0) { $space = '' ; for ( $i = 0; $i <= $level ; $i ++) { $space .= "t" ; } $evaluate = "Arrayn$space(n" ; $comma = $space ; foreach ( $array as $key => $val ) { $key = is_string ( $key ) ? '' '.addcslashes($key, ' '\').' '' : $key ; $val = ! is_array ( $val ) && (!preg_match( "/^-?d+$/" , $val ) || strlen ( $val ) > 12) ? '' '.addcslashes($val, ' '\').' '' : $val ; if ( is_array ( $val )) { $evaluate .= "$comma$key => " .arrayeval( $val , $level + 1); } else { //开源代码phpfensi.com $evaluate .= "$comma$key => $val" ; } $comma = ",n$space" ; } $evaluate .= "n$space)" ; return $evaluate ; } //写入文件 function swritefile( $filename , $writetext , $openmod = 'w' ) { if (@ $fp = fopen ( $filename , $openmod )) { flock ( $fp , 2); fwrite( $fp , $writetext ); fclose( $fp ); return true; } else { exit ( "File: $filename write error." ); return false; } } ?>adminconfig.php 后台权限配置文件,以一个数组形式保存,代码如下:
<?php $menus = array ( 'news' => array ( 'caption' => '资讯管理' , 'icon' => 'admin/icon_15.gif' , 'sub' => array ( 'newsaddtype' => array ( 'caption' => '分类增加' , 'url' => 'news/addtype.php' ), 'newstypemange' => array ( 'caption' => '分类管理' , 'url' => 'news/typemange.php' ), 'newsnewsend' => array ( 'caption' => '发布资讯' , 'url' => 'news/newsend.php' ), 'newsnewmange' => array ( 'caption' => '资讯管理' , 'url' => 'news/newmange.php' ), 'newscomments' => array ( 'caption' => '评论管理' , 'url' => 'news/comments.php' ), ), ), 'ask' => array ( 'caption' => '问卷调查' , 'icon' => 'admin/icon_15.gif' , 'sub' => array ( 'voteadmin_subject_add' => array ( 'caption' => '添加投票主题' , 'url' => 'vote/admin_subject_add.php' ), 'voteadmin_subject' => array ( 'caption' => '管理投票主题' , 'url' => 'vote/admin_subject.php' ), 'voteadmin_title_add' => array ( 'caption' => '添加投票问题' , 'url' => 'vote/admin_title_add.php' ), 'voteadmin_title' => array ( 'caption' => '管理投票问题' , 'url' => 'vote/admin_title.php' ), 'voteadmin_question_add' => array ( 'caption' => '添加投票答案' , 'url' => 'vote/admin_question_add.php' ), 'voteadmin_question' => array ( 'caption' => '管理投票答案' , 'url' => 'vote/admin_question.php' ), 'voteadmin_system' => array ( 'caption' => '投票初始配置' , 'url' => 'vote/admin_system.php' ) ), ), 'ads' => array ( 'caption' => '广告管理' , 'icon' => 'admin/icon_15.gif' , 'sub' => array ( 'ada' => array ( 'caption' => '增加广告' , 'url' => 'ada.php' ), 'adm' => array ( 'caption' => '广告管理' , 'url' => 'adm.php' ), 'flashadd' => array ( 'caption' => '焦点图广告增加' , 'url' => 'flashadd.php' ), 'flashad' => array ( 'caption' => '焦点图广告管理' , 'url' => 'flashad.php' ) ), ), 'mange' => array ( 'caption' => '系统管理员' , 'icon' => 'admin/icon_15.gif' , 'sub' => array ( 'adminuser' => array ( 'caption' => '管理员添加' , 'url' => 'adminuser.php' ), 'modpass' => array ( 'caption' => '密码修改' , 'url' => 'modpass.php' ) ), ), ); ?>left.php文件很简单就是根据用户登录后ID读出权限,代码如下:
<?php $userid = $_SESSION [ 'adminid' ]; include ( "op/admincofig.php" ); include ( "op/user/" . $userid . ".php" ); foreach ( $bb as $key => $submenu ) { echo "<tr><td bgcolor=" #D879A7 " style=" line-height:22px;text-align:center;color:#ffffff; "> nr <font color=" #EA6A8D " face=" Webdings "></font><b>" . $menus [ $key ][ 'caption' ]. "</b><br /></td></tr> nr <tr ><td bgcolor=" F5E8F1 ">" ; foreach ( $submenu as $subkey => $menuitem ) { $tmparr = explode ( "|" , $menuitem ); echo "<font color=" #EA6A8D " face=" Webdings ">4</font><a href='" . $tmparr [1]. "' target=" mainframe ">" . $tmparr [0]. "</a><br> nr" ; } echo "</td></tr> nr " ; } ?>op.php这个文件就是要调用我们的adminconfig.php文件,然后利用fun.php文件中函数把提供过来的数据保存成数组,点击保存我们调用了opsava.php 文件,代码如下:
<?php include ( "op/fun.php" ); if ( $_POST ) { $sarray = $_POST ; cache_write( $userid , 'bb' , $sarray ); //写入缓存 echo "<script>alert('编辑保存成功!');location='op.php?userid=" . $userid . "';</script>" ; } ?>保存成功后文件代码如下:
<?php $bb =Array ( 'member' => Array ( 'user_search' => '会员升级管理|user_search.php' ), 'membercy' => Array ( 'cyuser_search' => '会员升级管理|cyuser_search.php' , 'cyuser_search5' => '交友会员|cyuser_search.php?grade=5' ), 'userid' => 7, 'button' => '保存编辑' ) ?>这样的话我们的left只要加载 7.php文件就只会显示这里在的文件,这样一个基本的后台权限就完成了.
查看更多关于php后台多用户权限组思路与实现程序代码 - php高的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did30279