是按功能分配权限还是按其他方式分配权限
如按功能分配那如何知道某个URL是什么功能,用URL传功能代号?
举例用户管理的功能,有三个文件:
userlist.php
useradd.php
useredit.php
这里有四个功能
1.用户列表,对应文件userlist.php
2.用户删除,对应文件userlist.php
3.用户增加,对应文件useradd.php
4.用户修改,对应文件useredit.php
如有兴趣说说请用此例
kind.huang 发表于: 2008-8-28 09:33 来源: PHPChina 开源社区门户
最新回复
应用一下MVC,这个问题就比较好解决了
<?php
if( $act == 'add' ){
valid_admin_privilege('user.php','add');
//业务逻辑代码
}
elseif( $act == 'edit' ){
valid_admin_privilege('user.php','edit');
//业务逻辑代码
}
elseif( $act == 'list' ){
valid_admin_privilege('user.php','list');
//业务逻辑代码
}
?>
<?php
/**
* 该管理员的权限
*/
$_PRIV = array(
'user.php_add'=>'1',
'user.php_list'=>'1',
'...'=>'...'
)
function valid_admin_privilege($module,$act)
{
global $_PRIV;
if( $_PRIV[$module.'_'.$act] != 1 ) exit();
}
?>
这个是我那套基于角色和细粒度的分级权限系统的最最简单的模型,你看看可能帮助。
[ 本帖最后由 dmlk31 于 2008-8-28 11:16 编辑 ]
$_PRIV反应到数据库中大概就是:
user_id,module_id,act_id
请问是这样吗?
简化版数据库
模块表 module(module_id,name,file)
权限表 privilege(privilege_id,name,module_id,module_act_code,module_act_name)
管理员权限表 admin_privilege(admin_id,privilege_id)
$_PRIV是在登陆时初始化array(
$file.'_'.$module_act_code=>'1'
)
[ 本帖最后由 dmlk31 于 2008-8-28 12:01 编辑 ]
权限表 privilege(privilege_id,name,module_id,module_act_code,module_act_name)
管理员权限表 admin_privilege(admin_id,privilege_id)
这里为什么不直接用admin_id和module_id关联,而要多个权限表?
这个权限系统和单一入口系统结合,其网址大概为:index.php?module=file&active=module_act_code
那如果和非单一入口系统结合,那怎么判断当前页面的权限呢,也用URL传值吗?
module1.php
<?php
require('../include/init.php');
//其他业务代码
?>
module2.php
<?php
require('../include/init.php');
//其他业务代码
?>
访问采用
module1.php?act=xxx
module2.php?act=xxx
每个受保护的文件都加载init.php文件,init.php负责加载通用信息以及未登录的强制跳转。
而权限判断则放在其他业务代码里。
[ 本帖最后由 dmlk31 于 2008-8-28 17:36 编辑 ]
init.php
//模块 - 文章模块
article.php
未命名.jpg
[ 本帖最后由 dmlk31 于 2008-8-29 09:09 编辑 ]