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

また、ユーザー名とパスワードを追加しない場合、およびデフォルトのユーザー名とパスワードが更新されている場合は、デフォルトのユーザー名とパスワードを挿入し、更新されたものを削除しません。idは本当にいくつかの助けと提案に感謝しているので、私はそれを十分に明確にしたことを願っています。ありがとう

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

少なくとも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」の別のユーザーがいる場合に限ります。「current-user」自体にアクセスレベル「admin」がない場合は、とにかく一致します。

このように、「admin」アクセスレベルを持つ1人のユーザーを一度作成する必要があります。「admin」アクセスレベルを持つ最後のユーザーだけでなく、さらに多くのユーザーを追加および削除できます。

SQLですべてを実行する場合は、BEFOREDELETETRIGGERを作成できます。そこで、削除したくないユーザー名を確認するだけです。MySqlトリガーでINSERT操作を中止する方法を参照してください。例として、これはINSERTに対して与えられますが、DELETEに対しても同じように機能します。

繰り返しになりますが、構成ファイル(提案どおり)またはデータベースロジックを使用してアプリケーションをカスタマイズするかどうかは、実際にはセットアップによって異なります。

于 2012-08-25T22:10:08.667 に答える