Asp.net 如何在mysql数据库中存储文件列表并根据用户角色显示

Asp.net 如何在mysql数据库中存储文件列表并根据用户角色显示,asp.net,mysql,asp.net-mvc-3,roles,Asp.net,Mysql,Asp.net Mvc 3,Roles,我是一个asp.NETMVC新手。自从经典asp之后,我什么都没做过。我想根据用户角色显示Mysql数据库中的文件列表。到目前为止,我已经创建了两个表,一些文件将由多个角色查看。我还使用MySql成员资格提供程序 表文件 FileID, FileName, FilePath 表文件角色 FileID, RoleID 我想我可以将一个文件添加到文件表中,然后对于有权访问该文件的每个角色,我需要将文件ID添加到文件角色表中,还需要从my\u aspnet\u roles表中获取RoleID,并将

我是一个asp.NETMVC新手。自从经典asp之后,我什么都没做过。我想根据用户角色显示Mysql数据库中的文件列表。到目前为止,我已经创建了两个表,一些文件将由多个角色查看。我还使用MySql成员资格提供程序

文件

FileID, FileName, FilePath
文件角色

FileID, RoleID
我想我可以将一个文件添加到文件表中,然后对于有权访问该文件的每个角色,我需要将文件ID添加到文件角色表中,还需要从
my\u aspnet\u roles
表中获取
RoleID
,并将其添加到

然后,当有人去查看文件时,它会获取他们所处的每个角色的ID,然后从数据库中获取文件列表


我不知道从哪里开始,因此非常感谢您的帮助。

让我告诉您最新情况:

1.创建用户并将其添加到角色 Webdeveloper Express和Visual Studio为您的网站提供了一个Web管理工具:

要访问网站管理工具,请在“网站”菜单上单击“ASP.Net配置”

参考:

您可以添加用户和角色,并从中向角色添加用户

2.创建数据库记录(假设您有某种mysql管理面板) 现在在数据库中创建一些文件记录,并在文件和角色之间创建一些关联记录。我将使用
RoleName
而不是
RoleID
,因为默认的RoleProvider接口与
string
名称一起工作

3.了解如何从ASP.NET查询mysql数据库 请阅读以下示例:

4.根据用户角色创建正确的查询
希望这能让你达到目的…

让我告诉你最新情况:

1.创建用户并将其添加到角色 Webdeveloper Express和Visual Studio为您的网站提供了一个Web管理工具:

要访问网站管理工具,请在“网站”菜单上单击“ASP.Net配置”

参考:

您可以添加用户和角色,并从中向角色添加用户

2.创建数据库记录(假设您有某种mysql管理面板) 现在在数据库中创建一些文件记录,并在文件和角色之间创建一些关联记录。我将使用
RoleName
而不是
RoleID
,因为默认的RoleProvider接口与
string
名称一起工作

3.了解如何从ASP.NET查询mysql数据库 请阅读以下示例:

4.根据用户角色创建正确的查询
希望这能让你达到目的…

这就是我目前所拥有的。它可以工作,但我知道它是不正确的,因为我在控制器中做数据库的事情,这应该在模型中完成,但我不知道如何以这种方式完成

模型

控制器

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);
    }
public ActionResult Index()
{
IList downloads=新列表();
//获取用户角色感谢Ropstah
字符串[]userRoles=Roles.GetRolesForUser(User.Identity.Name);
字符串userRolesForSqlQuery=userRoles.Select(x=>“'+x+”)。聚合((a,b)=>a+”,“+b);
//MySql连接再次感谢Ropstah
字符串连接string=“我的数据源”;
var MySqlConnectionString=String.Format(@“从下载中选择文件ID、文件名、文件路径
downloads.fileid=downloadsroles.downloadsid上的内部连接downloadsroles
其中downloadsroles.roleName位于({0});”,userRolesForSqlQuery);
MySqlConnection conn=新的MySqlConnection(connectionString);
MySqlCommand comm=conn.CreateCommand();
MySqlDataReader;
comm.CommandText=MySqlConnectionString;
conn.Open();
Reader=comm.ExecuteReader();
while(Reader.Read())
{
downloads.Add(新文件(){fileName=Reader[“fileName”].ToString(),
filePath=Reader[“filePath”].ToString()});
}
康涅狄格州关闭();
返回视图(下载);
}
看法

@foreach(在ViewData.Model中下载var)
{
@下载.fileName
@下载.filePath
}

这是我到目前为止所拥有的。它可以工作,但我知道它是不正确的,因为我在控制器中做数据库的事情,这应该在模型中完成,但我不知道如何以这种方式完成

模型

控制器

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);
    }
public ActionResult Index()
{
IList downloads=新列表();
//获取用户角色感谢Ropstah
字符串[]userRoles=Roles.GetRolesForUser(User.Identity.Name);
字符串userRolesForSqlQuery=userRoles.Select(x=>“'+x+”)。聚合((a,b)=>a+”,“+b);
//MySql连接再次感谢Ropstah
字符串连接string=“我的数据源”;
var MySqlConnectionString=String.Format(@“从下载中选择文件ID、文件名、文件路径
downloads.fileid=downloadsroles.downloadsid上的内部连接downloadsroles
其中downloadsroles.roleName位于({0});”,userRolesForSqlQuery);
MySqlConnection conn=新的MySqlConnection(connectionString);
MySqlCommand comm=conn.CreateCommand();
MySqlDataReader;
comm.CommandText=MySqlConnectionString;
conn.Open();
Reader=comm.ExecuteReader();
while(Reader.Read())
{
downloads.Add(新文件(){fileName=Reader[“fileName”].ToString(),
filePath=Reader[“filePath”].ToString()});
}
康涅狄格州关闭();
返回视图(下载);
}
看法

@foreach(var在
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>
}