2

私はasp.net mvcの初心者です。私は古典的なASP以来、実際には何もしていません。ユーザーの役割に基づいて、Mysql データベースからファイルのリストを表示したいと考えています。これまでに 2 つのテーブルを作成しましたが、一部のファイルは複数の役割で表示できます。MySql メンバーシップ プロバイダーも使用しています

テーブルファイル

FileID, FileName, FilePath

テーブルファイルの役割

FileID, RoleID

ファイル テーブルにファイルを追加し、そのファイルにアクセスできるロールごとに、fileID を FilesRole テーブルに追加しRoleID、テーブルからを取得して追加する必要があると考えていmy_aspnet_rolesます。

そして、どういうわけか誰かがファイルを見に行くと、彼らがいるすべての役割のIDを取得し、データベースからファイルのリストを取得します

どこから始めればいいのかわからないので、どんな助けでも大歓迎です。

4

2 に答える 2

0

私はあなたをスピードアップしましょう:

1. ユーザーを作成してロールに追加する

Webdeveloper Express と Visual Studio には、Web サイト用の Web 管理ツールがあります。

Web サイト管理ツールにアクセスするには、[Web サイト] メニューの [ASP.Net 構成] をクリックします。

参照: http://msdn.microsoft.com/en-us/library/yy40ytx0.aspx

そこからユーザーとロールを追加し、ユーザーをロールに追加できます。

2. データベース レコードを作成します (何らかの mysql 管理パネルがあると仮定します)。

次に、データベースにいくつかのファイル レコードを作成し、ファイルとロールの間にいくつかの関連付けレコードを作成します。デフォルトの RoleProvider インターフェイスは名前で機能するため、RoleName代わりに使用します。RoleIDstring

3. ASP.NET から mysql データベースにクエリを実行する方法を学ぶ

たとえば、これを読んでください:http://support.discountasp.net/KB/a358/how-to-query-a-mysql-database-in-aspnet.aspx

4. ユーザーの役割に基づいて正しいクエリを作成する

string[] userRoles = Roles.GetRolesForUser(HttpContext.Current.User.Identity.Name);

// creates "'role1','role2' from array.
string userRolesForSqlQuery = userRoles.Select(x => "'" + x + "'").Aggregate((a,b) => a + "," + b); 


//Psuedo code for querying the database...
var fileForUserQuery = String.Format("SELECT FileID, FileName, FilePath FROM Files 
                           INNER JOIN FilesRole ON Files.FileID = FilesRole.FileID
                           WHERE FilesRole.RoleName IN ({0});", userRolesForSqlQuery);

うまくいけば、これでそこにたどり着けます...

于 2012-04-13T10:27:59.980 に答える
0

これは私がこれまでに持っているものです。それは機能しますが、コントローラーでデータベース関連の作業を行っており、モデルで行う必要があるため、正しくないことはわかっていますが、その方法で行う方法がわかりません。

モデル

public class files
{
    public int fileid { get; set; }
    public string fileName { get; set; }
    public string filePath { get; set; }
}

コントローラ

public ActionResult Index()
    {
        IList<files> downloads = new List<files>();
        // Get Users Role(s) thanks Ropstah
        string[] userRoles = Roles.GetRolesForUser(User.Identity.Name);
        string userRolesForSqlQuery = userRoles.Select(x => "'" + x + "'").Aggregate((a, b) => a + "," + b);

        // MySql Connection thanks again Ropstah
        string connectionString = "my data source";
        var MySqlConnectionString = String.Format(@"SELECT fileid, fileName, filePath, FROM downloads
                                                    INNER JOIN downloadsroles on downloads.fileid = downloadsroles.downloadsid
                                                    WHERE downloadsroles.roleName IN ({0});", userRolesForSqlQuery);

        MySqlConnection conn = new MySqlConnection(connectionString);
        MySqlCommand comm = conn.CreateCommand();
        MySqlDataReader Reader;
        comm.CommandText = MySqlConnectionString;
        conn.Open();
        Reader = comm.ExecuteReader();

        while (Reader.Read())
        {
            downloads.Add(new files() { fileName = Reader["fileName"].ToString(),
                                        filePath = Reader["filePath"].ToString()});
        }

        conn.Close();

        return View(downloads);
    }

意見

@foreach (var downloads in ViewData.Model)
{
<tr>
    <td>
        @downloads.fileName
    </td>
    <td>
        @downloads.filePath
    </td>
</tr>
}
于 2012-04-19T05:40:09.470 に答える