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

时间:2012-04-12 21:42:02

标签: asp.net mysql asp.net-mvc-3 roles

我是一名asp.net mvc新手。自从经典的asp以来我没有做过任何事情。我想根据用户角色显示Mysql数据库中的文件列表。到目前为止,我创建了两个表,一些文件可以被多个角色查看。我也在使用MySql Membership Provider

文件

FileID, FileName, FilePath

FilesRole

FileID, RoleID

我想我可以将文件添加到files表中,然后对于每个有权访问该文件的角色,我需要将fileID添加到FilesRole表中,并从{{{{}}获取RoleID 1}}表并将其添加到。

然后以某种方式当某人去查看文件时,它将获取他们所在的每个角色的ID,然后从db获取文件列表

我不知道从哪里开始,所以任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:0)

让我让你加快速度:

1。创建用户并将其添加到角色

Webdeveloper Express和Visual Studio为您的网站提供了一个Web管理工具:

  

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

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

您可以从那里添加用户和角色以及添加用户到角色。

2。创建数据库记录(假设您有某种类型的mysql管理面板)

现在在数据库中创建一些文件记录,并在文件和角色之间创建一些关联记录。我会使用RoleName而不是RoleID,因为默认的RoleProvider界面使用string名称。

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

希望这能让你到那里......

答案 1 :(得分:0)

这是我到目前为止所拥有的。它有效,但我知道它不正确,因为我在Controller中做数据库的东西,应该在模型中完成,但我无法弄清楚如何以这种方式完成它。

模型

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>
}