2

まず、テーブルは次のようになります。

ユーザータスク

次に、私のコードから、ユーザー権限を確認する方法があります

  public bool HasPermission(Guid userTaskId)

(SQL スクリプトによって) usertask テーブルに新しい行を挿入するたびに、次のように、id を定数に格納して、そのアクセス許可を確認する必要があります。

  public static readonly Guid TaskA = new Guid("6F28B771-2E3E-47DD-9CB4-48B4130A8CBE");
  public static readonly Guid TaskB = new Guid("8B273B24-AD3A-41D6-969D-49A854B4E896");

  // Check permission
  if(HasPermission(Helper.TaskA)){
       // Do something if user has permission on task A
  }

問題は、私のプログラムには多くのタスクがあり、多くの定数を保存する必要があることです。とにかく手動ですべてを保存せずに許可を動的にチェックすることはありますか? 平均的なアプリケーションでは、管理者ユーザーが必要な多くのタスクを動的に追加できるため、他のユーザーのすべてのタスクの許可を確認できます。
前もって感謝します。

4

1 に答える 1

0

を活用してみてはいかがでしょうかDictionary。次のように、すべてのキーを前もってキャッシュすることができます。

var tasks = new Dictionary<string, string>();
var selectCmd = "SELECT UserTaskId, Name FROM UserTasks";

using (SqlConnection c = new SqlConnection(connString))
{
    c.Open();
    using (SqlCommand cmd = new SqlCommand(selectCmd, c))
    {
        // provide any parameters

        using (SqlDataReader rdr = cmd.ExecuteReader())
        {
            tasks.Add(rdr.GetString(0), rdr.GetString(1));
        }
    }
}

Dictionaryここで、これを作成して、グローバルにアクセスできる場所に保存する必要があります。というSingleton名前のGlobalConfiguration.

次に、呼び出す方法を変更して、HasPermissionを受け取るだけにしますstring

public bool HasPermission(string userTaskId) ...

ここで、もう 1 つのフィールドが欠落している可能性があると思いますUserId。しかし、私は現時点ではそれを見ていません。Dictionary<string, List<string>>ユーザーが持つアクセス許可を格納する を作成する必要があります。他のものと非常によく似た方法でそれを埋めます。

もう1つ。現在は でアクセスしていますUserTaskIdが、可能であれば、Name代わりに を使用するように切り替えてください。私の例では、フィールドが選択されている順序を簡単に切り替えることができます。

于 2013-06-15T09:46:14.413 に答える