2012-08-25 121 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'並確認您沒有刪除該記錄。 –

相關問題