PowerShell SALAD:ユーザーを区別する

環境を利用するユーザーをグルーピングして区別するということを考えます。
必要なのはグループの名前と適用先だと思います。
が、この考えを持つべきはかなり初期の設計でないとうまくいきません。
実は考えていませんでした。
なので、ここではAdministratorとそれ以外の区別だけつけ、
Administratorはすべてのコマンドをみえるがそれ以外はみえるコマンドが限られている
というような状態を定義することにします。

考えるのが遅かったので、後から急に付け足したようなテキストファイルをAdministratorリストとしてもちます。
ルートフォルダ\definition\system\administrators\
にAdministratorユーザーを改行区切りで書き込んだテキストファイルを置き、
これを環境初期化部分で読み込んでAdministratorとして認識、コマンドのVisibilityを設定するようにします。

コマンドのVisibilityの設定も定義しないといけません。とってつけたようにテキストファイルを配置します。
ルートフォルダ\definition\system\publiccommand\
Administratorでなくても参照可能と定義するコマンド名を改行区切りで記述します。

そして、環境初期化部分で次のような記述を入れます。


$adminlist = Get-ChildItem ($SessionManager.GetValue("system.session.directory.definition.system") + "administrator\") | %{Get-Content $_.fullname};
$badm = $false;
foreach($admine in $adminlist)
{
$global:badm = $badm -or ($SessionManager.GetValue("system.session.environment.account") -eq $admine);
}

if(!$badm)
{
$publist = Get-ChildItem ($SessionManager.GetValue("system.session.directory.definition.system") + "publiccommand\") | %{Get-Content $_.fullname};
$comml = Get-Command;
foreach($pube in $publist)
{
$comml = $comml | ?{$_.name -ne $pube};
}
$comml | %{$_.visibility = "private"};
}

Administratorユーザーリストを読み込んで、セッションを開始したユーザーと照合、
Administratorでない場合は、publicとして定義したコマンド以外をprivateにしてしまう。
これでAdministrator以外のユーザーにみせるコマンドを制御することができました。
後からとってつけたような機能はダメ設計ですね。
ほんとはもっと中枢にあってよい定義なのに、こんなにうわべです。
環境のジェネレーションを上げる際に見直されるべきです。