我现在的问题是怎么做才合理,具体在HTML里如何实现选人的操作?
解决方案 »
- PHP Version 5.3.3-7+squeeze8 如何升级至 PHP Version 5.3.3-7+squeeze14 ?
- 为什么同一个网站空间,不同版本网站,用国外测速http://www.webkaka.com/测出的下载速度相差很大,求解
- php 下载文件 问题
- (有偿)求一段 弹出对话框代码! 最好用JS调用 (有偿)
- ckfinder不能上传大文件
- 关于SSL,求教!
- PHP 脚本 不支持 PDO->PREPARE()语句?
- 请释疑:PHP这种怪异语法
- 我有一个js和表单的问题,想寻求帮助!
- 是不是php也有权限问题?
- javascript 正则使用错误
- 正则的问题,把$12当做$1再加一个字符"2",这个问题怎么解决
先将所有人分组加tag
像blog文章分类更改权限时可以设定预设权限, allow all 或 deny all
之后用 tag , 分类 , 人名 做filter
再一个个或全组做设定
通常MARK就是接分的意思,很少有做标记的。
难道大家就做过比较细致的权限控制吗?
<?php
// FleaPHP Framework
//
// Copyright (c) 2005 - 2007 FleaPHP.org (www.fleaphp.org)
//
// 许可协议,请查看源代码中附带的 LICENSE.txt 文件,
// 或者访问 http://www.fleaphp.org/ 获得详细信息。class FLEA_Rbac
{
var $_sessionKey = 'RBAC_USERDATA'; var $_rolesKey = 'RBAC_ROLES'; function FLEA_Rbac()
{
$this->_sessionKey = FLEA::getAppInf('RBACSessionKey');
if ($this->_sessionKey == 'RBAC_USERDATA') {
trigger_error(_ET(0x0701005), E_USER_WARNING);
}
} function setUser($userData, $rolesData = null)
{
if ($rolesData) {
$userData[$this->_rolesKey] = $rolesData;
}
$_SESSION[$this->_sessionKey] = $userData;
} function getUser()
{
return isset($_SESSION[$this->_sessionKey]) ?
$_SESSION[$this->_sessionKey] :
null;
} function clearUser()
{
unset($_SESSION[$this->_sessionKey]);
} function getRoles()
{
$user = $this->getUser();
return isset($user[$this->_rolesKey]) ?
$user[$this->_rolesKey] :
null;
} function getRolesArray()
{
$roles = $this->getRoles();
if (is_array($roles)) { return $roles; }
$tmp = array_map('trim', explode(',', $roles));
return array_filter($tmp, 'trim');
} function check(& $roles, & $ACT)
{
$roles = array_map('strtoupper', $roles);
if ($ACT['allow'] == RBAC_EVERYONE) {
// 如果 allow 允许所有角色,deny 没有设置,则检查通过
if ($ACT['deny'] == RBAC_NULL) { return true; }
// 如果 deny 为 RBAC_NO_ROLE,则只要用户具有角色就检查通过
if ($ACT['deny'] == RBAC_NO_ROLE) {
if (empty($roles)) { return false; }
return true;
}
// 如果 deny 为 RBAC_HAS_ROLE,则只有用户没有角色信息时才检查通过
if ($ACT['deny'] == RBAC_HAS_ROLE) {
if (empty($roles)) { return true; }
return false;
}
// 如果 deny 也为 RBAC_EVERYONE,则表示 ACT 出现了冲突
if ($ACT['deny'] == RBAC_EVERYONE) {
FLEA::loadClass('FLEA_Rbac_Exception_InvalidACT');
__THROW(new FLEA_Rbac_Exception_InvalidACT($ACT));
return false;
} // 只有 deny 中没有用户的角色信息,则检查通过
foreach ($roles as $role) {
if (in_array($role, $ACT['deny'], true)) { return false; }
}
return true;
} do {
// 如果 allow 要求用户具有角色,但用户没有角色时直接不通过检查
if ($ACT['allow'] == RBAC_HAS_ROLE) {
if (!empty($roles)) { break; }
return false;
} // 如果 allow 要求用户没有角色,但用户有角色时直接不通过检查
if ($ACT['allow'] == RBAC_NO_ROLE) {
if (empty($roles)) { break; }
return false;
} if ($ACT['allow'] != RBAC_NULL) {
// 如果 allow 要求用户具有特定角色,则进行检查
$passed = false;
foreach ($roles as $role) {
if (in_array($role, $ACT['allow'], true)) {
$passed = true;
break;
}
}
if (!$passed) { return false; }
}
} while (false); // 如果 deny 没有设置,则检查通过
if ($ACT['deny'] == RBAC_NULL) { return true; }
// 如果 deny 为 RBAC_NO_ROLE,则只要用户具有角色就检查通过
if ($ACT['deny'] == RBAC_NO_ROLE) {
if (empty($roles)) { return false; }
return true;
}
// 如果 deny 为 RBAC_HAS_ROLE,则只有用户没有角色信息时才检查通过
if ($ACT['deny'] == RBAC_HAS_ROLE) {
if (empty($roles)) { return true; }
return false;
}
// 如果 deny 为 RBAC_EVERYONE,则检查失败
if ($ACT['deny'] == RBAC_EVERYONE) {
return false;
} // 只有 deny 中没有用户的角色信息,则检查通过
foreach ($roles as $role) {
if (in_array($role, $ACT['deny'], true)) { return false; }
}
return true;
} function prepareACT($ACT)
{
$ret = array();
$arr = array('allow', 'deny');
foreach ($arr as $key) {
do {
if (!isset($ACT[$key])) {
$value = RBAC_NULL;
break;
} if ($ACT[$key] == RBAC_EVERYONE || $ACT[$key] == RBAC_HAS_ROLE
|| $ACT[$key] == RBAC_NO_ROLE || $ACT[$key] == RBAC_NULL) {
$value = $ACT[$key];
break;
} $value = explode(',', strtoupper($ACT[$key]));
$value = array_filter(array_map('trim', $value), 'trim');
if (empty($value)) { $value = RBAC_NULL; }
} while (false);
$ret[$key] = $value;
} return $ret;
}
}
关键是权限控制怎么做需要好好设计一下。
全部作为根,每个部门一个节点,每个人作为叶子节点。然后选择的时候,如果直接在根上的 checkbox 勾选,就是全选,勾选某个部门,就是全选下级节点。这个用 js 配合递归就可以实现。