1

我正在使用 php 和 mysql 来开发应用程序;关于它的一些背景数据,它是一个登录系统,它存储用户名和密码以及登录系统所做的所有工作。但是我在删除用户时遇到了一个问题,删除用户的功能可以正常工作,但问题是例如管理员可以删除自己而留下没有用户的数据库。所以我想做的是当我在主页上时,运行一个函数来检查是否存在特定的用户名

//Example:
Table name: users
columns: username, password
default username and password I want to always remain in table 'users'
username=dames and password=:password 
//End of Example

如果不添加用户名和密码,并且如果默认用户名和密码已更新,则插入默认用户名和密码,并且不删除更新的用户名和密码。我希望我说得足够清楚,因为我真的很感谢一些帮助和建议。谢谢

4

2 回答 2

1

与其不断地重新创建您的管理员用户,为什么不阻止管理员删除自己呢?

if ($user_to_delete == $current_logged_in_user) {
   // Sorry, you can't delete yourself...
}

或者在应用程序的配置文件中存储一组超级管理员。不允许任何人删除超级管理员用户。

// In the config file...
$super_admins = array("you", "someone_else");

if (in_array($user_to_delete, $super_admins)) {
  // Sorry, you can't delete a super-admin from the UI.
  // Delete him from the application config first...
}

为了保护您自己多一点,如果您只需要一个无法删除的超级管理员,请在配置中使用无法在代码中修改的常量:

define('SUPER_ADMIN', 'you');

*注意:你不能建立一个常量数组,但是serialize() 这个问题有一个解决方法

于 2012-08-25T21:55:50.293 回答
1

如果您想确保至少有一位管理员始终存在,请仅在另一位管理员仍然存在时删除该管理员:

DELETE
  u1
FROM
  user u1
LEFT JOIN
  user u2
ON
  u1.access = u2.access
WHERE
  u1.name = "current-user" AND
  ((u1.name != u2.name AND u1.access = "admin") OR (u1.access != "admin"));

上面给定的查询需要一个带有用户名(名称)和访问级别(访问)的表。它匹配用户“current-user”,但前提是存在另一个具有访问级别“admin”的用户。如果“当前用户”本身没有访问级别“管理员”,则无论如何都会匹配。

这样,您只需创建一个具有“管理员”访问级别的用户一次。可以添加和删除更多用户,而不是最后一个具有“管理员”访问级别的用户。

如果你想在 SQL 中做所有事情,你可以创建一个 BEFORE DELETE TRIGGER。在那里,您只需检查您不想被删除的用户名。请参阅如何在 MySql 触发器中中止 INSERT 操作?举个例子 - 它是为 INSERT 给出的,但对于 DELETE 是一样的。

再说一次,如果您想使用配置文件(如建议的那样)或数据库逻辑来自定义您的应用程序,这实际上取决于您的设置。

于 2012-08-25T22:10:08.667 回答