2012-08-25 76 views
1

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

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

回答

1

如果你想确保至少有一个管理员是始终存在的一种变通方法,仅删除管理员如果另一个e仍然存在:

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")); 

上面给出的查询需要一个包含用户名(名称)和访问级别(访问权限)的表。它与用户“当前用户”相匹配,但只有当访问级别为“admin”的另一个用户时。如果“当前用户”本身没有访问级别“admin”,则无论如何都是匹配的。

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

如果你想在SQL中做所有事情,你可以创建一个BEFORE DELETE TRIGGER。在那里,你只需检查你不想被删除的用户名。例如,请参阅How to abort INSERT operation in MySql trigger? - 它是针对INSERT提供的,但对DELETE的作用相同。

然后,如果您想使用配置文件(如建议)或数据库逻辑来定制您的应用程序,那么它真的取决于您的设置。

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()in this question

+0

用超级管理员用户:define('SUPER_ADMIN','你');听起来很不错,但是这将如何在confi文件中定义,因为我的配置文件只包含我的数据库的密码和用户名 – dames

+0

@dames无论您的配置文件中有什么格式,无论是全局变量还是某个配置对象或常量,只需将其中的一个定义为'SUPER_ADMIN'并确认您没有删除该记录。 –

相关问题