Я работаю над API, в котором у меня есть другой набор людей, у которых на их странице должен быть разный набор элементов управления, в зависимости от роли пользователя.Отображение различных элементов управления для разных групп пользователей в mvc web API
Я использую пользовательские фильтры, чтобы определить, какие пользователи будут иметь доступ к каким страницам, и я могу успешно это сделать, но проблема в том, что у меня есть три кнопки ссылок на странице мастеров, и только пользователи с ролью администратора должны иметь возможность см. все кнопки ссылок, а остальные пользователи будут иметь только кнопку выхода.
У меня есть моя главная страница следующим образом.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<header>
<div class="content-wrapper">
<div class="float-left">
<p class="site-title">
<a href="~/">
<img src= '@Url.Content("~/Images/logo.png")' /></a>
</p>
</div>
<div class="float-right">
<table>
@if (Request.IsAuthenticated)
{
<tr>
<td class="btn">@Html.ActionLink(@Html.Encode(User.Identity.Name).ToUpper() + "!!", "Index", "Admin")</td>
<td class="btn">@Html.ActionLink("Manage Users", "Index", "System_User")</td>
<td class="btn">@Html.ActionLink("Sign Out", "Logout", "User")</td>
</tr>
}
else
{
<tr>
<td class="User btn">
@Html.ActionLink("Sign In", "Login", "User")</td>
</tr>
}
</table>
</div>
</div>
</header>
<div class="container">
@RenderBody()
</div>
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
</body>
</html>
Пользовательских Авторизоваться класс
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public bool IsAdmin { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
using (var cn = new SqlConnection(@"Data Source=xyz.com;Initial Catalog=123$;Persist Security Info=True;User ID=abc;Password=$pqr"))
{
string _username = httpContext.User.Identity.Name;
string _sql = @"SELECT [IsAdmin] FROM [dbo].[System_User] " +
@"WHERE [Username] = @u";
var cmd = new SqlCommand(_sql, cn);
cmd.Parameters.AddWithValue("@u", _username);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
cn.Open();
da.SelectCommand = cmd;
da.Fill(ds);
if (ds.Tables[0].Rows.Count != 0)
{
string admin = ds.Tables[0].Rows[0]["IsAdmin"].ToString();
if (admin == "True")
{
cmd.Dispose();
IsAdmin = true;
return IsAdmin;
}
return false;
}
return false;
}
}
}
Я попытался с помощью несколько мастера-страницы для различных точек зрения, вопрос Когда администратор посещает страницу, которая, как главная страница, что из обычного пользователя, очевидно, админ не имеют доступа к трем кнопкам ссылки, если администратор остается на этой странице.
Просто добавьте IsAdmin к вашему ViewBag, и использовать его в View. Кстати, почему вы используете SQL-запросы для получения данных из базы данных? – ataravati
Есть ли лучший способ получить данные из базы данных? Вы имеете в виду LINQ? – DoIt
Да, сущность framework и linq. – ataravati