Php 如何在网站中组织群组?(管理员、管理员权限、用户标识)
我将要做一个小用户系统,但我有问题Php 如何在网站中组织群组?(管理员、管理员权限、用户标识),php,mysql,admin,administration,mysql-management,Php,Mysql,Admin,Administration,Mysql Management,我将要做一个小用户系统,但我有问题 如果我要创建一个注册表(mysql),只将密码和用户名存储到数据库中而不加密有什么错 我正在考虑如何构建管理部分。我是否应该检查数据库中的一列,看看用户是否是管理员?如果为true,则将显示管理页面 对于管理权限,假设我有3个权限:删除用户、批准用户和移动用户。在一些情况下,我可能只想让某些人能够批准、删除、全部或任意组合。我该怎么做?我在考虑为每一个电源设置一个专栏,并让脚本检查每一个专栏。让我们假设我有超过20个将被添加的异能 如果我有一个网站,人们可以创
prm_user_id | prm_permission
0 | Admin
0 | Delete
1 | Add
4.我几年前写过这篇文章,它在一家大公司被大量使用。如果你想了解更多关于该模式的信息,请与我联系。1-我建议你为每个用户使用唯一的salt加密密码。这样,如果你的系统被压缩,你的用户密码就不会被黑客使用(他们没有更多的黑客攻击) (有点老,但有一些好信息) 2、3、4—所有这些都可以通过各种web语言实现。我建议您首先阅读数据库设计,找出哪种规范化和表模式最适合您的情况。如果您决定在将来为管理员用户添加更多权限,您可以从一开始就进行设计,避免任何错误在未来和现在的需求范围内
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
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
}
}
}
INSERT INTO group_user_permissions
SELECT `group_user`.`groupid`, `group_user`.`userid`, `permission`.`permbit`
FROM permission, `group_user`
WHERE `group_user`.`groupid` = 1
AND `group_user`.`userid` = 1
if( $permbit === "approve" )
在您的情况下,用户1是整个站点的管理员,用户2是组3的管理员,组2的版主,用户3是组2的成员
[编辑:
关于限制不同角色的权限的更多想法:根据您的设置,您应该在每页的基础上使用一些角色强制,例如在MVC框架中,我将扩展基本控制器以要求为每个方法调用(角色)授权函数,否则它应该抛出异常。方法(页面)不需要用户登录的用户可以使用虚拟授权
所以authorization类看起来像
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
}
新的基本控制器类将如下所示:
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
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
}
}
}
INSERT INTO group_user_permissions
SELECT `group_user`.`groupid`, `group_user`.`userid`, `permission`.`permbit`
FROM permission, `group_user`
WHERE `group_user`.`groupid` = 1
AND `group_user`.`userid` = 1
if( $permbit === "approve" )
最后,您的控制器将看起来像:
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
1)存储明文密码意味着,如果有人访问了您的数据库,他们仍然不知道密码。关于加密密码的炒作非常愚蠢,一个简单的方法对任何人都可以
$password = "Mypassword";
$salt = "a unique and constant string";
$password = md5($password.$salt);
这样做的目的是通过md5();
对密码进行加密,在使用md5()对密码进行加密后,您无法将其取回。对其进行加密还可以确保无法仅找到密码
如果要比较并查看密码是否有效,只需按如下完全相同的方式输入md5即可:
$password = "check_this_password";
if(md5($password.$salt) === $originalPassword)
{
//same password
}
2)这个问题取决于您希望如何将组与管理端集成。如果根本没有其他权限设置,则只在数据库中存储一个具有帐户级别的字段是安全的。否则,请使用我的下一点来确定他们是否是管理员
3)实现权限系统的最简单方法如下,还有其他方法,但最好不要使其复杂化。如果您想要每个组的权限,您可以添加一个额外的列,如prm\u group\u id
,并找出特定组中每个用户的权限。但无论如何,它的工作原理如下:
创建一个表来保存权限
prm_user_id | prm_permission
0 | Admin
0 | Delete
1 | Add
每行都有一个标志或权限。
然后,通过一点SQL和PHP就可以很简单地确定他们是否拥有所需的权限
function hasPermission($permission, $userID)
{
$permissions = array();
$sql = "SELECT prm_permission FROM user_permissions WHERE prm_user_id = $userID";
$query = mysql_query($sql);
while($data = mysql_fetch_array($query))
{
$permissions[] = $data['prm_permission'];
}
//Check if they have a permission with this:
if(in_array($permission, $permissions))
{
return true;
}
return false;
}
这允许您添加和删除权限