将当前基于角色的过程 php 站点转换为 MVC 和 ACL


Converting current role based procedural php site to MVC and ACL

我目前有一个项目,其中需要用 MVC 重写一个具有奇怪基于角色设置的程序 PHP 站点(可能是代码点火器,因为我是 MVC 的新手),我无法完全了解最好的方法。

当前站点使用某种前端控制器来检查数据库中登录用户的安全级别,并根据反映安全级别的目录结构构建页面。

目录结构:

root
    -admin (sees everything and everyone elses subordinates)
        -- Reports listing managers, and their users
        -- CRUD for managers and their reports
        -- CRUD for users and their reports (types listed below)
    -manager (has users as subordinates, and can see all data related to them)
        -- Reports listing the manager's users
        -- CRUD for users and their reports (types listed below)
    -user (Can only see their own information)
        -- Reports listing the users information (lists, calendars, calls, etc.)
        -- CRUD for users reports (types listed above)

数据库用户表伪数

1 = admin
2 = manager
3 = user
UserAccountTable
    id
    pass
    user
    email
    security level (1,2,3)
manager Table
    manager ID
    User Account ID
    other fields containing personal info
user Info Table
    user Info id
    User Account ID
    Manager ID
    other fields containing personal info

前控制器伪

load header
load menu
determine level from db
    if 1 load requested file from admin folder
    if 2 load requested file from manager folder
    if 3 load requested file from user folder
load footer

主要问题:

当前

设计中是否有任何突出的固有问题(如果您需要有关当前结构的更多细节以回答,请告诉我)?

鉴于当前站点的上述结构,在 MVC 结构中使用当前自上而下的安全类型(1 看到 2 和 3,2 看到 3,3 看到 3)重新设计安全性的可靠方法是什么,是否可以对数据库进行最小的更改?

我不是在寻找代码(尽管如果有人知道这样的东西,我可以查看以收集一些理解,那将是有帮助的),而是对过程的更多概念理解。

当前的设计有一些局限性。角色的数量已固定,角色的权限也已固定。更好的设计方法是以下方式。

User Table
----------
id
password
email
.....
permissions Table
-----------------
id
name
roles Table
-----------
id
name
user_roles Table
----------------
userid
roleid
roles_permission
----------------
roleid
permissionid

在上面的表设计中,可以将权限分配给角色,然后将角色分配给用户。然后编写一些帮助程序函数(如hasPermission())可以决定登录的用户是否具有访问某些内容所需的权限。为了获得更高的性能,可以创建一些视图来显示用户的权限,并在视图上查询并检查用户是否具有该权限。

我在 www.thephpcode.com 设计代码点火器网站生成器时遵循了相同的方法。可以创建演示并免费查看管理门户,以查看其在 UI 中的工作方式。