gpt4 book ai didi

php - 如何在网站内构建群组? (管理员、管理员权限、用户身份)

转载 作者:可可西里 更新时间:2023-11-01 07:48:37 25 4
gpt4 key购买 nike

我打算制作一个小型用户系统,但我有问题。

  1. 如果我要做一个注册表(mysql),不加密就只把密码和用户名存入数据库有什么问题?

  2. 我正在考虑如何构建管理部分。我应该只检查数据库中的一列以查看用户是否是管理员吗?如果为真,则会显示管理页面。

  3. 对于管理员权限,假设我有 3 项权限:删除用户、批准用户和移动用户。在一些场景中,我可能只想给一些人批准,或删除,或全部,或任何组合的能力。我该怎么做?我正在考虑为每种能力设置一列,并让脚本检查每一列。假设我有超过 20 项权力将被添加。

  4. 如果我有一个网站,人们可以在其中创建群组并成为其群组的管理员,并且这些管理员可以为群组中的人员提供不同的管理权限组合(例如,Zack 创建了名为 Mountain 的群组并授予一个成员能够批准新的组成员并授予第二个成员删除成员的能力并为第三个成员分配删除和批准的能力。我将如何在 MySQL 中构建它?我应该使用一个列来说明他们是哪个组管理员他们有什么能力?例如列:删除、批准、GroupMemberOf、GroupAdminOf 和使用检查。

我有一个想法,但我想学习更复杂的方法。

感谢您到目前为止的回答,但是,我真的是在寻找关于结构的想法(问题 2 - 4)。如果我能帮助解决这个问题,请告诉我。 p>

最佳答案

  1. 使用每个用户的唯一盐对用户密码进行哈希处理,这样当外部人员可以访问您的数据库时,他们无法解密密码,并且盐缓解了 rainbow table attacks .

2 - 4. 使用访问级别表(1:成员,2:主持人(批准),3:管理员),并使用另一个不同的表来存储用户权限,您可以在其中存储多对多连接,如下所示:

id (auto_increment)|usr_id|role_id|group_id
-------------------------------------------
1 |1 |3 |-1
2 |2 |2 |1
3 |2 |3 |2
4 |3 |1 |2

在您的例子中,用户 1 是整个站点的管理员,用户 2 是组 3 的管理员和组 2 的版主,用户 3 是组 2 的成员。

[编辑:]

关于限制不同角色的权力的更多想法:根据您的设置,您应该在每页的基础上使用一些角色强制,例如在 MVC 框架中,我将扩展基本 Controller 以要求必须为每个方法调用一个(角色)授权函数,否则它应该抛出异常。不需要用户登录的方法(页面)可以使用虚拟授权。

所以授权类看起来像

class Authorization
{
public $authorized = false;

public function dummy()
{
$this->authorized = true;
}

public function member($usr_id, $group_id = null)
{
$sql = "SELECT usr_id FROM usr_roles WHERE usr_id = " . $usr_id . ($group_id !== null) ? " AND group_id " . $group_id : "";
// count the results of $sql query
// or some more stuff
if ($results > 1)
{
$this->authorized = true;
}
else
{
$this->authorized = false;
}
}

// the other functions
}

您的新 Controller 基类将如下所示:

class BaseController extends Controller
{
protected $authorization;
public function __construct()
{
$this->authorization = new Authorization();
}

public function render()
{
if ($this->authorization->authorized === true)
{
parent::render
}
else
{
// redirect to not authorized page
}
}
}

最后,您的 Controller 将如下所示:

class IndexController extends BaseController
{
// some stuff, methods etc.

// methods needs logged in user and user must be a member.
public function index()
{
$this->authorization->member($session_user->getId());
}
}

[EDIT2:]

如果您不熟悉 OOP,那么您可以执行以下操作:

这是角色表的示例布局:

role_id|role_name
-----------------
1 |member
2 |moderator
3 |admin

然后您可以创建一个函数 authorize() 以包含在您的所有文件中:

// role_name = "member", "moderator", "admin"
function authorize($usr_id = null, $role_name = null, group_id = null)
{
// test for user in group and role, return boolean

}

在您的文件中包含此函数并执行以下操作

if (authorize($usr_id, "moderator", 2)
{
// show stuff, if user with $usr_id is moderator for group 2
}
else
{
// do something else
}
// stuff for all

关于php - 如何在网站内构建群组? (管理员、管理员权限、用户身份),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1527069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com