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

...
}

Source: https://habr.com/ru/post/J73238/


All Articles