![](/img/trans.png)
[英]Access Control and RBAC (Roles Based Access Control) In PHP Hybrid (procedural and OOO) application
[英]Implementing Roles based access control in php application
我一直在为我的大学开发一个PHP应用程序,该应用程序需要基于角色的访问控制。 我遵循的方法是为每个角色创建一个单独的MySQL用户。 因此,每个角色都有一个单独的数据库用户。 这些数据库用户中的每个用户都具有角色所需的最小表集的特权。
现在,我的问题是这实际上是否是处理基于角色的应用程序的正确方法。 我之所以对此表示怀疑,是因为现在是时候让该系统在线(带有GoDaddy托管)了,我发现他们不允许创建具有表特定特权的用户。 实际上,他们甚至不允许直接通过SQL脚本创建用户(系统上的角色创建涉及通过执行SQL命令的php脚本创建用户)。
因此,我现在正在考虑我的方法是否正确。 实现这种基于角色的系统的标准方法是什么?
这是我的第一个实时项目,因此我在实际交付实际项目方面并没有太多的经验。
除非您不是托管人,否则您可能不想通过脚本动态创建数据库用户。 考虑一下:
数据库用户是与您的应用程序而非最终用户进行交互的组件。
因此,请为您的应用程序保留一个数据库,并使用专用表来构建您的ACL。 您的数据库架构可能如下所示:
users( id:pk, name )
roles( id:pk, name )
permissions( id:pk, key, description )
permission_role( permission_id:fk, role_id:fk )
role_user( role_id:fk, user_id:fk )
您基本上在这里有三件事:
这是基本设置。 其他表只是将各个部分连接在一起的助手表。
您的代码将处理其余部分。 设置一个(或更好的)类来完成繁重的工作。 然后将您的ACL实例传递给User类(当然可以实现其他实现。请参见文章底部)。
<?php
class Acl implements AclInterface {
public function hasPermissionTo( $action )
{
// Query DB and check if a record exists
// in the role_user table where the
// user_id matches with the current user
// and join the role_id with `roles` and then
// with `permission_role` to see if the user
// is permitted to perform a certain action
}
}
class User {
protected $acl;
public function __construct( AclInterface $acl )
{
$this->acl = $acl;
}
public function hasPermissionTo( $action )
{
return $this->acl->hasPermissionTo( $action );
}
}
您应该了解基本概念。 实际的实施取决于您。 您可能需要考虑的事项:
User
一部分,还是成为独立的组件? 这些问题取决于您喜欢什么以及您的体系结构。 编码愉快!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.