我将要制作一个小型用户系统,但我有疑问.
>如果我要创建一个注册表(mysql),只是将密码和用户名存储到数据库而没有加密有什么问题?
>我正在考虑如何构建管理部分.我应该只检查数据库中的列以查看用户是否是管理员?如果为true,则会显示管理页面.
>对于管理员权力,假设我有3种权力:删除用户,批准用户和移动用户.在一些情况下,我可能想要给某些人仅批准,删除或全部或任何组合的能力.我该怎么做?我想为每个电源都有一个列,并让脚本检查每一列.假设我有超过20个将被添加的权力.
>如果我有一个网站,人们可以创建群组并成为他们群组的管理员,这些管理员可以为群组中的人员提供不同的管理权限组合(例如,Zack创建和群组称为Mountain并授予一个成员批准的能力新的组成员并授予第二个成员删除成员的权限,并为第三个成员分配删除和批准的能力.我将如何在MySQL中构建这个?我应该使用一个列来说明他们管理的是哪个组以及有哪些能力做他们有?例如列:删除,批准,GroupMemberOf,GroupAdminOf并使用检查.
我有一个想法,但我想学习更复杂的方法.
到目前为止,感谢您的答案,我真的在寻找结构上的想法(问题2 – 4).如果我能帮忙解决问题,请告诉我.
解决方法:
>为每个用户散列具有唯一salt的用户密码,这样当局外人可以访问您的数据库时,他们无法解密密码,并且盐可以缓解rainbow table attacks.
2 – 4.使用表格访问级别(1:成员,2:主持人(批准),3:admin),并使用另一个不同的表格来存储多对多连接的用户权限,如下所示:
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框架中,我会扩展基本控制器以要求必须为每个方法调用(角色)授权函数,否则它应该抛出异常.不需要用户登录的方法(页面)可以使用虚拟授权.
所以授权类看起来像
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
}
您的新基本控制器类将如下所示:
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
}
}
}
最后,您的控制器最终将如下所示:
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