我是一名asp.net mvc新手。自从经典的asp以来我没有做过任何事情。我想根据用户角色显示Mysql数据库中的文件列表。到目前为止,我创建了两个表,一些文件可以被多个角色查看。我也在使用MySql Membership Provider
表文件
FileID, FileName, FilePath
表 FilesRole
FileID, RoleID
我想我可以将文件添加到files表中,然后对于每个有权访问该文件的角色,我需要将fileID添加到FilesRole表中,并从{{{{}}获取RoleID
1}}表并将其添加到。
然后以某种方式当某人去查看文件时,它将获取他们所在的每个角色的ID,然后从db获取文件列表
我不知道从哪里开始,所以任何帮助都会非常感激。
答案 0 :(得分:0)
让我让你加快速度:
Webdeveloper Express和Visual Studio为您的网站提供了一个Web管理工具:
要访问网站管理工具,请在“网站”菜单上单击“ASP.Net配置”。
参考:http://msdn.microsoft.com/en-us/library/yy40ytx0.aspx
您可以从那里添加用户和角色以及添加用户到角色。
现在在数据库中创建一些文件记录,并在文件和角色之间创建一些关联记录。我会使用RoleName
而不是RoleID
,因为默认的RoleProvider界面使用string
名称。
请阅读此内容:http://support.discountasp.net/KB/a358/how-to-query-a-mysql-database-in-aspnet.aspx
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>
}