我想让不同的角色访问管理信息中心。现在它们是superadmin
和admin
..稍后我会再增加2个,但现在只是这两个。目前superadmin
具有创建新管理员的所有权限。管理员将有权在以后创建普通用户,但现在superadmin和admin之间的差异只是这个。我在PHP中相当新,之前在这里发帖我发现很少这样的项目,但是它们非常先进,我不能很好地理解它们,因为它们采用OOP方法。
所以我在数据库中创建了几个表:users
,action_permissions
和user_permissions
。
表users
为用户保存数据..没什么特别的:
+---------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+----------------+
| user_id | int(11) | NO | PRI | NULL | auto_increment |
| user_username | varchar(35) | NO | | NULL | |
| user_password | char(64) | NO | | NULL | |
| user_email | varchar(55) | NO | | NULL | |
| user_role | int(11) | NO | | NULL | |
+---------------+-------------+------+-----+---------+----------------+
表action_permission
按住gp_name:Creat(1),Read(2),Update(4),Delete(8)
+---------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+----------------+
| gpid | int(11) | NO | PRI | NULL | auto_increment |
| gp_name | varchar(10) | NO | | NULL | |
| gp_permission | int(4) | NO | | NULL | |
+---------------+-------------+------+-----+---------+----------------+
表格user_permissions
暂停role_id.user_permissions = users.user_role
。在permission_namespace中,我存储了SuperAdmin或Admin ..而permission_action是gp_permission
+----------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+-------------+------+-----+---------+----------------+
| permission_id | int(11) | NO | PRI | NULL | auto_increment |
| role_id | int(11) | NO | | NULL | |
| permission_namespace | varchar(50) | NO | | NULL | |
| permission_action | int(4) | NO | | NULL | |
+----------------------+-------------+------+-----+---------+----------------+
到目前为止一切顺利。我已成功使用superadmin和admin登录,并使用此查询来查看我是否正确permission_action
:
$value = $pdo->prepare("SELECT *
FROM users
LEFT JOIN user_permissions ON users.user_role = user_permissions.role_id
WHERE user_role = ?");
$value->bindValue(1, $_SESSION['user_role'], PDO::PARAM_INT);
$value->execute();
foreach($value as $row)
{
....
}
现在我几乎没有问题:
1)由于这不是一个复杂的系统,这种方法是否可接受,即它是否正确?
2)当用户登录系统时如何显示只有他的角色可以看到的东西,你能给我一个简单的例子吗?我是否需要在页面上有多个if{}else{}
条件,或者我可以拥有一些课程页面并包含?
示例:
具有admin登录权限的用户。然后,他必须只能看到普通用户的CRUD。
拥有superadmin权限的用户登录。他将看到管理员和普通用户的CRUD。
P.S。很抱歉很长的帖子,但我差不多完成了这个......只需要一些帮助即可完成它。