Используйте Razor для создания кнопок
Вы можете структурировать представление Razor, включив в него модель представления, содержащую разрешения пользователя. Затем вы можете добавить каждую кнопку на страницу в зависимости от того, есть ли у пользователя разрешение на выполнение этого действия.
Допустим, у вас есть модель (назовем ее Users
) с набором разрешений, к которому вы можете получить доступ через Users.UserPermissions
. Ваше свойство UserPermissions
может иметь логическое значение CanAdd
и CanSearch
. Вы должны заполнить эту модель данными из вашей базы данных о рассматриваемом пользователе, а затем отобразить страницу следующим образом:
<div class="container">
@{
if (Model.UserPermissions.CanAdd)
{
<button class="add">Add</button>
}
if (Model.UserPermissions.CanSearch)
{
<button class="search">Search</button>
}
}
</div>
Затем проверьте свои разрешения на стороне сервера
Это означает, что кнопка будет добавлена в интерфейс только в том случае, если у пользователя есть разрешение на выполнение этого действия.
[HttpPost]
public ActionResult Index(UserViewModel model)
{
var user = User.GetByEmail(userEmail);
if (user.CanAdd)
{
myClass.Add(model.ThingsToAdd);
}
if (user.CanSearch)
{
myClass.Search(model.ThingsToSearchFor);
}
return View()
}
Когда пользователи отправляют форму, программа также проверяет разрешения пользователя на сервере, чтобы гарантировать действительность запроса. Даже если злоумышленнику удалось найти скрытый способ выполнить функцию, которую ему не разрешено выполнять, программа все равно может ограничить злоумышленника от выполнения указанного действия, проверив возвращаемые данные и убедившись, что пользователю действительно разрешена эта функция. .
Это эквивалентно попытке снять деньги в банке — кассир должен сначала убедиться, что у вас есть деньги в банке, прежде чем они вручат вам наличные.
Чего НЕ следует делать
Абсолютно никогда не полагайтесь на скрытые поля или объекты, возвращаемые клиентом, для определения результата управляемой переменной. Вы должны всегда предполагать, что данные, отправленные клиентом, небезопасны или подделаны. Запускайте проверки, дезинфицируйте свои входные данные и пытайтесь проверить, что все, что клиент отправляет вам, является правдой.
Такие вещи, как разрешения на выполнение действий, должны всегда проверяться на стороне сервера и никогда ни на чем другом.
person
Horkrine
schedule
04.01.2018