1

これは初心者の質問です。ユーザーの詳細を保持するクラスを設計しています。私が頭を悩ませているのは「許可」です

これがシナリオです。各ユーザーは複数の都市に属しています。そして、さまざまな権限を持つことができるその都市で。

たとえば、John は NY と DC にいて、NY では 1、2、3 の権限を持ち、DC では 3、4 の権限を持っています。

これを考慮してクラスを設計する方法がわかりません。

私が設計しなかった私のテーブルは、次のようになります(いくつかのサンプルデータを含む):

userID  City   permission
John    NY     1
John    NY     2
John    NY     3
John    DC     3
John    DC     4
Jane    DC     1
Jane    DC     2
Jane    NY     6

私のC#クラスでは、もともと次のように別々に書き出しました:

     public class User
        {

            public string userid { get; set; }
            public string name{ get; set; } //from main user table
            public string address{ get; set; } //from main user table
            public List<string> Citites{ get; set; } //from usercitypermission table
            public List<string> userRole { get; set; }//from usercitypermission table

public User(string username)
    {
        this.userid = username;

        DataSet ds = new DataSet();
        SqlConnection conn = new SqlConnection(cCon.getConn());

        SqlCommand cmd = new SqlCommand("sp_getUserDetails", conn);

        // 2. set the command object so it knows
        // to execute a stored procedure
        cmd.CommandType = CommandType.StoredProcedure;

        // 3. add parameter to command, which
        // will be passed to the stored procedure
        cmd.Parameters.Add(
            new SqlParameter("@userName", username));

        try
        {
            // Open the connection and execute the Command
            conn.Open();
            SqlDataAdapter sqlDA = new SqlDataAdapter();

            sqlDA.SelectCommand = cmd;
            sqlDA.Fill(ds);
        }
        catch (Exception ex)
        {
            throw (ex);
        }
        finally
        {
            conn.Close();
        }

        this.userRole = new List<string>();
        foreach (DataTable DT in ds.Tables)
        {
            foreach (DataRow dr in DT.Rows)
            {
                this.userRole.Add(dr["permission"].ToString());
            }
        }
    }

これらを設定すると、 my で個別に実行するだけなtblUserCityPermissionので、私の Cities にCitiesはユーザーの個別のリストが保持されます (このコードは投稿しませんでしたが、これは実行されるストアド プロシージャにすぎません。はそのユーザーのすべての権限 (1-10)をuserRole保持しますが (上記を参照)、その権限が適用される都市は考慮されません。

これが理にかなっていることを願っています。:-/

私の質問は、ユーザーがいる特定の都市 (または都市) にアクセス許可が関連付けられるようにクラスを設計するにはどうすればよいかということだと思いListます。私はここから離れていますか?

4

3 に答える 3

2

都市とその権限のクラスも作成する必要があります。次のようなもの:

class CityPermission
{
    public string Name;
    public List<int> Permissions{ get; set; }
}

いいえ、市の所有物としての許可はありません。次に、ユーザーのプロパティです。

class User
{
    .
    .
    .
    public List<CityPermission> Citites{ get; set; }
    .
    .
    .
}
于 2013-03-27T19:10:30.647 に答える
1

タイプを定義する代わりに、次を使用できますDictionary

public Dictionary<string, List<string>> Permissions { get; set; }

キーは都市名で、値はその都市に適した権限のリストです。

于 2013-03-27T19:11:15.167 に答える
0

次のように、これらすべてを複数レベルの辞書に格納できます。

    Dictionary<string, Dictionary<string, Dictionary<int, int>>> UserCityPermissions = new Dictionary<string, Dictionary<string, Dictionary<int, int>>>();
    UserCityPermissions.Add("John", new Dictionary<string, Dictionary<int, int>>());
    UserCityPermissions["John"].Add("NY", new Dictionary<int,int>());
    UserCityPermissions["John"]["NY"].Add(1, 1);
    UserCityPermissions["John"]["NY"].Add(2, 2);
    UserCityPermissions["John"]["NY"].Add(3, 3);
    UserCityPermissions["John"].Add("DC", new Dictionary<int, int>());
    UserCityPermissions["John"]["DC"].Add(3, 3);
    UserCityPermissions["John"]["DC"].Add(4, 4);
    UserCityPermissions.Add("Jane", new Dictionary<string, Dictionary<int, int>>());
    UserCityPermissions["Jane"].Add("DC", new Dictionary<int, int>());
    UserCityPermissions["Jane"]["DC"].Add(1, 1);
    UserCityPermissions["Jane"]["DC"].Add(2, 2);
    UserCityPermissions["Jane"].Add("NY", new Dictionary<int, int>());
    UserCityPermissions["Jane"]["NY"].Add(6, 6);
于 2013-03-27T19:16:41.973 に答える