ロール関連の権限のないユーザでユーザ作成するとエラー  【解決済み】

質問全般・改善要望
返信する
kazh
メンバー
メンバー
記事: 12
登録日時: 2010年2月26日(金) 20:18

ロール関連の権限のないユーザでユーザ作成するとエラー

投稿記事 by kazh »

いつもお世話になっております。

ロール関連の権限が全てないユーザで、ユーザ作成を行うとSQLエラーが発生します。
実際使っているのは最新版では無いのですが、最新1.0.10-r2のソースでも変わってなさそうだったので、一応報告します。

原因は、
/manager/actions/mutate_user.dynamic.php
line:347

elseif(!$modx->hasPermission('edit_role')
&& !$modx->hasPermission('save_role')
&& !$modx->hasPermission('delete_role')
&& !$modx->hasPermission('new_role')
)
{
$where = 'id=' . $userdata['role'];
}
これだと思います。
新規作成の場合、$userdata['role']がないので、where句が"id="になってしまいます。

とりあえず、ロール権限がないユーザでも既にあるロールは選べて良いのではないかと
$where = 'edit_role=0 AND save_role=0 AND delete_role=0 AND new_role=0';
に変更して事なきを得ました。
ご参考まで。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: ロール関連の権限のないユーザでユーザ作成するとエラー

投稿記事 by yama »

報告ありがとうございます。その対応だと、ロール権限を持たないユーザがAdministratorレベルのユーザを自分で作ることができてしまうので、一般に配布するものとしては少し調整が必要かもしれません。次のリリースで修正したいと思います。
kazh
メンバー
メンバー
記事: 12
登録日時: 2010年2月26日(金) 20:18

Re: ロール関連の権限のないユーザでユーザ作成するとエラー

投稿記事 by kazh »

yamaさん

お返事ありがとうございます。
その対応だと、ロール権限を持たないユーザがAdministratorレベルのユーザを自分で作ることができてしまう
なるほど、そうですね。
うちの運用では、ユーザ管理権限を持つ者は、どんなレベルのユーザでも作れて良い(というかAdministratorレベルのロールをそもそも用意していないので、権限を持つ者はロールの範囲で誰かを権限昇格しても問題ない)ので、大丈夫なのでした。AdministratorロールはAdministrator以外のログイン時は選択肢に出ない、という性質を利用した運用です。
この辺はどこまで汎用性を考慮できるか難しいところかもしれませんね。
修正内容については「ご参考まで」ですので、お任せいたします。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: ロール関連の権限のないユーザでユーザ作成するとエラー  【解決済み】

投稿記事 by yama »

コード: 全て選択

if($userid==$modx->getLoginUserID())
{
	if($modx->hasPermission('save_role'))
		$where = 'save_role=1';
	else
		$where = 'save_role=0';
}
else
{
    $where = '';
}
上記のように単純にしてみましたが、いかがでしょうか?基本的に自分自身だけを昇格・降格できないようにしました。
(降格できないようにするのは管理者不在になってしまう事故を防ぐため)
勝手にAdminアカウントを作ってしまうことはできますが、新規アカウント作成だけは無効にするなど運用でカバーできると思います。
何も考えなくてもそこそこ安全という形ではなくなりますが、ルールがシンプルになって分かりやすくなるというメリットはあると思います。
返信する