我正在开发一个小项目,我想实现一个"高级"角色系统基于页面用户访问。 我在处理这个方案背后的逻辑时遇到了一些麻烦,因为我希望能够添加和删除角色和权限,我想这样做是可行的。希望您能与我分享您的建议。
我的用户表位于用户名,密码等字段旁边,它包含 userlevel 字段。
我计划创建以下方案:
角色表:
id - AI -> is referenced with **userlevel** field in users table
name - Role Name
description - Role Description Description
页面表:
id - AI
page_link -> saves the link of the page
description
权限表:
id - AI
role_id -> referenced with **id** in roles table
page_id -> referenced with **id** in pages table
所以我的想法是:
应该以某种方式受到保护的每个页面:
我的链接如下: /添加用户 /删除用户/的 USER_ID
如果我授予page / remove-user权限,用户是否可以删除用户? (基本上可以访问/ remove-user / user_id )
我认为这是正确的方法吗?我在创建这样的系统时感到非常困惑。 我真的想要访问页面和功能(例如,应该允许moderador禁止用户但不删除它 - 如果这些功能在同一页面上,我该如何实现呢?)。除此之外,我需要另一张桌子用于"功能"允许用户这样做与否,并以这种方式创建代码?
例如表 userfunctions
id
role_id
permission
如果在此表中有权限edit_users,那么在渲染页面时,如果在数组"功能",显示与否按钮?
请你以这种方式指导我吗? 没有这样的理论,有更快的方法吗? 我可以轻松地执行此代码,我只是在这样的方案背后的逻辑过程中感到困惑。
由于
答案 0 :(得分:1)
我的个人方法:
我通常通过在每个页面的顶部放置一个函数来完成上述所有操作:
<?php
require('system_loader.php');
check_access(ACCESS_LEVEL_ADMIN);
在我的配置文件中,我定义了一组当前角色:
define('ACCESS_LEVEL_SUPERADMIN',1);
define('ACCESS_LEVEL_ADMIN',2);
define('ACCESS_LEVEL_MODERATOR',5);
define('ACCESS_LEVEL_USER',10);
define('ACCESS_LEVEL_PUBLIC',100);
然后,我可以在每个页面的顶部定义查看它所需的访问级别。
因此,该函数的伪代码为:
function check_access($level_required) {
if ($level_required= ACCESS_LEVEL_PUBLIC) return;
if (user_session_is_not_valid) redirect to login
if (user_level < $level_required) redirect to user account page
}
这是一个基本系统,但它可以让您免于担心逻辑,只要您在管理用户会话方面掌握了一切。它依赖于权限的滑动比例,因此最高值将始终具有最多权限,而最低值将仅具有公共权限。
请注意,将硬编码到系统中的角色与您在数据库中拥有角色的建议不同。可以应用相同的逻辑,除非您需要检查数据库中的角色。
我还应该注意到你提出的系统也可以正常工作。它会更复杂,并且可以在个人职能等方面给予更大的控制。
在我的示例中,您可以简单地限制使用条件编码,检查是否应该允许用户执行特定功能。
如果您希望角色不适合滑动访问规模,那么您确实必须维护一个参考表,将访问级别与特定页面或函数相关联。