管理者かどうかの判定

管理コマンド。それは管理人のみが実行できるコマンド。
@パ内で色々な管理コマンドで巧みにプレイヤーを管理、憧れますよね。
それを作るのに必要になってくる、「プレイヤーが管理人かどうか」の判定。
管理人が一人の場合は、
if ($m eq '管理人の名前') { ・・・ }
で解決なんですが、管理人が複数居たり、副管理人や副々管理人まで作ると条件を書くのがとても大変になりますね。
さらにその上、管理者が改名したら…?全ての部分を新しい名前に書き換えるなんてぞっとしますよね。
そこで、関数を使ってわかりやすくスパッとまとめてしまおう!というのが今回のテーマです。


まず初めに、「./config.cgi」を開いてください。
そこに、管理人一覧のハッシュを作っていきます。
書き方はこんな感じ。
%admins = (
	'管理人A'       => 1,
	'管理人B'       => 1,
	'副管理人A'     => 2,
	'副管理人B'     => 2,
	'副管理人C'     => 2,
	'副々管理人A'   => 3,
	'副々管理人B'   => 3,
	'副々管理人C'   => 3,
);
このような具合に、管理人を管理レベルごとに分けてハッシュを作ります。
数字が小さいほど管理権限レベルが高く、1が最高管理者になるようにしてください。
私の@パでやっている実例はこんな感じです。
# 管理人
%admins = (
	# 1 : 管理人
	'luna'     => 1,
	'snow'     => 1,
	
	# 2 : 副管理人
	'ラダマンティス' => 2,
); 
はい、これで管理人一覧が出来ました。あとはコイツを用いる関数を作っておしまいです。


続いて、「./lib/system.cgi」を開いてください。
そして、空いているところに以下の関数を追加。
sub is_admin {
	my($need_lv,$name) = @_;
	$need_lv ||= 1;
	$name ||= $m;
	return unless $admins{$name};
	return $admins{$name} if $need_lv == -1;
	return $admins{$name} == $need_lv ? 2
		 : $admins{$name} < $need_lv ? 1
		 : 0
		 ;
}
お疲れ様です。これで準備は整いました。


さて、実際にどのように使うかを説明いたしましょう。
この関数を呼び出すと、数字が返されます。
返される数字は関数の呼び出し方によって臨機応変に変わるようになっています。順を追って説明しますね。
&is_admin;
このように引数を指定しないで呼び出すと、「自分が最高管理者であるか」の真偽が返されます。
最高管理者である場合はtrue、そうでない場合はfalseになります。
&is_admin(2);
このように引数に数字を一つだけ指定すると、「自分がその引数以上の管理者権限を持っているか」の真偽が返されます。
持っている場合はtrue、持っていない場合はfalseになります。
また、引数の数値と自分の管理者権限が一致している場合は、真は真でも1ではなく2が返されるようになっています。
これを利用すると、副管理人専用のコマンドなどを作成することが可能です。
&id_admin(-1);
このように引数に-1を指定すると、自分の管理権限レベルの数値が返ってきます。
管理権限が無い場合はfalseとなり、何も返ってきません。
&is_admin(1,'プレイヤー名');
このように数字の後にプレイヤー名を指定すると、自分ではなく、引数で渡したプレイヤーの管理権限についての結果が返されます。

使い方の説明はこれで終了です。
様々な条件に対応できるように組んであるので、色々なパターンに対応することができるようになっています。


□最後に
他にも管理人を判断するやり方は色々あるでしょう。例えば、プレイヤーの変数に管理人レベルを表すものを追加する、など。
ただし、それでは、管理者が増えると、一体誰が管理人なのかわからなくなってしまいます。
管理画面に管理者権限の有無を表示するようにすれば解決しそうですが、そうしても、管理権限を付与したり剥奪したりする時に、わざわざプレイヤーデータのハッシュの値を書き換えないとならないので、結構な面倒になります。
そこが、このページで紹介した方法を使用することにより、「./config.cgi」の中の管理人リストを弄るだけですぐに変えることが出来ます。非常に楽ですね。
また、管理者権限レベルの追加も簡単です。副管理人までしか居なかったけど、副々管理人も欲しいなぁ…って時も、管理者一覧をちょちょっと書き換えてしまえば終了です。
このように、この方法を使うことで、これからの管理体制の変更に柔軟に対応することが出来るようになるわけです。

最終更新:2011年12月05日 12:42