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