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);
}
...
}