简单 PHP/MySQL ACL 系统
Simple PHP/MySQL ACL System
我在 PHP 和 MYSQL 中有一个简单的 ACL 系统。不过我需要帮助完成它...
我有 2 个数据库 table,如下所示...
user_link_permissions :为每个用户保存一条记录,每个 entity/link 权限适用于...
--
-- 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 table...
中的一条记录
我需要帮助在 PHP 中创建一个简单的 ACL 函数,它可以根据数据库结果检查用户是否有权查看 link/entity。
在页面加载时,我想我可以查询 user_link_permissions
数据库 table 以获取具有已登录用户的匹配用户 ID 的所有记录,并将它们存储到会话数组变量中。
函数然后可以使用该数组来检查 link/entity 使用实体键上的数组值的权限。
我无法想象它在 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
}
我会把代码留给你玩。
假设您将所有先前查询的权限存储在一个名为 $_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];
但如果未设置,我会尝试捕获异常。
我在 PHP 和 MYSQL 中有一个简单的 ACL 系统。不过我需要帮助完成它...
我有 2 个数据库 table,如下所示...
user_link_permissions :为每个用户保存一条记录,每个 entity/link 权限适用于...
--
-- 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 table...
中的一条记录我需要帮助在 PHP 中创建一个简单的 ACL 函数,它可以根据数据库结果检查用户是否有权查看 link/entity。
在页面加载时,我想我可以查询 user_link_permissions
数据库 table 以获取具有已登录用户的匹配用户 ID 的所有记录,并将它们存储到会话数组变量中。
函数然后可以使用该数组来检查 link/entity 使用实体键上的数组值的权限。
我无法想象它在 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
}
我会把代码留给你玩。
假设您将所有先前查询的权限存储在一个名为 $_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];
但如果未设置,我会尝试捕获异常。