ASP.NETアプリケーションでの操作に対するユーザー権利の差別化の組織

多くのマルチユーザーWebアプリケーションでは、操作に対するユーザー権限を区別する必要があります。 たとえば、システム管理者はすべての操作を使用できますが、通常のユーザーが操作できるのは一部のみです。たとえば、エントリを削除および編集することはできません。



Webアプリケーションのユーザーの観点から見ると、操作はコントロール要素(ボタン、リンク)で表され、この操作を使用してこの操作を開始できます(DLLの関数呼び出し-DAL-DBレベルが実行されます)。 したがって、最も単純な場合に操作のユーザー権利を区別するには、コントロールに対する権利を区別するだけで十分です。







これを行うには、データベース内のアプリケーションのニーズに適した構造を編成できます。 ユーザーがこの構造から承認されると、NotAccessOperationsテーブルのユーザーに対して禁止されている(または、より便利な場合は許可されている)操作に関する情報がUserProfileに読み込まれます。



public class UserProfile

{

...

Hashtable notAccessOperations = new Hashtable();

public Hashtable NotAccessOperations

{

get { return notAccessOperations; }



}

...

}








ユーザーの権限に応じて選択的にアクセスできるコントロールは、操作へのユーザーアクセスの構造に対応するプロパティを記述するIAccessControlインターフェイスを実装させます。



public interface IAccessControl

{

...

string IdGroup { get;set;}

...

}








ユーザーへのアクセシビリティのためのすべてのIAccessControlコントロールの処理は、一定の方法で1つの場所で実行されることが望ましいです。たとえば、別のクラスに配置されます。



public static class UserAccessController

{

...



public static void ResoleUserAccess(WebControl ctrl)

{



...

// ,

if (((UserProfile)HttpContext.Current.Session["UserProfile"]).NotAccessOperations.Contains(((IAccessControl)ctrl).IdGroup))

{

ctrl.Visible = false;

}



...

}



...

}








IAccessControlコントロールの実装は、たとえば次のようになります。



public class SomeCommandButton : CompositeControl, IAccessControl

{

...

public string IdGroup

{

set { ViewState["IdGroup"] = value; }

get

{

object o = ViewState["IdGroup"];

return (o != null) ? (string)ViewState["IdGroup"] : "";

}

}



protected override void OnInit(EventArgs e)

{

base.OnInit(e);

UserAccessController.ResoleUserAccess(this);

}



...

}








All Articles