我在PHP和MYSQL中启动了一个简单的ACL系统。我需要帮助才能完成它......
我有2个数据库表,如下所示......
user_link_permissions:为权限适用的每个实体/链接上的每个用户保留一条记录...
--
-- Table structure for table `user_link_permissions`
--
CREATE TABLE IF NOT EXISTS `user_link_permissions` (
`id` int(100) NOT NULL AUTO_INCREMENT,
`user_id` int(30) NOT NULL,
`link_id` int(30) NOT NULL,
`permission` int(2) NOT NULL DEFAULT '0',
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2055 ;
intranet_links:基本上是权限提供或撤消用户访问权限的实体
--
-- Table structure for table `intranet_links`
--
CREATE TABLE IF NOT EXISTS `intranet_links` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`description` text NOT NULL,
`url` varchar(255) DEFAULT NULL,
`notes` text,
`user_login` varchar(255) DEFAULT NULL,
`user_pw` varchar(255) DEFAULT NULL,
`active` int(2) NOT NULL DEFAULT '1',
`sort_order` int(11) DEFAULT NULL,
`parent` int(10) NOT NULL DEFAULT '1',
`local_route` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `local_route` (`local_route`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ;
要保存这些权限设置,我有一个矩阵样式网格,如下所示,其中每个复选框都是user_link_permissions表中的记录...
我需要帮助在PHP中创建一个简单的ACL函数,它可以检查用户是否有权根据数据库结果查看链接/实体。
在页面加载时,我想我可以在user_link_permissions
数据库表中查询具有匹配用户ID的登录用户的所有记录,并将它们存储到会话数组变量中。
然后,函数可以使用该数组来检查实体键上使用该数组值的链接/实体权限。
我无法直观地了解它在PHP中的表现。
请帮忙吗?
function aclCanAccess($user_id, $entity_id){
}
$entity_id = 123;
if(aclCanAccess(1, $entity_id){
// yes user can see this item
}else{
// NO user permission denied
}
答案 0 :(得分:2)
我将把代码写给你以获得乐趣。
假设您将所有先前查询的权限存储在名为$_SESSION['acl']
您的ACL功能应该:
简而言之
function..... {
if(!isset($_SESSION['acl'][$entity_id])) {
$_SESSION['acl'][$entity_id] = query here to return to you if he has access or not
}
return $_SESSION['acl'][$entity_id];
}
您还可以在登录用户时读取整个阵列。这也许是合适的。在这种情况下,你应该能够
return $_SESSION['acl'][$entity_id];
但是,如果没有设置,我会尝试捕获异常。