使用 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()
}
当用户提交表单时,程序还会检查用户在服务器上的权限,以确保请求的有效性。即使攻击者设法找到一种偷偷摸摸的方法来执行他们不被允许执行的功能,程序仍然可以通过检查返回的数据并验证用户是否真的被允许执行该功能来限制攻击者执行所述操作.
这相当于试图从银行取款 - 出纳员应该先检查以确保您在银行里有一些钱,然后再给您任何现金。
你不应该做的事
绝对不要依赖从客户端返回的隐藏字段或对象来确定托管变量结果。您应该始终假设从客户端发送的数据是不安全的或被篡改的。运行您的检查,清理您的输入,并尝试验证客户发送给您的所有内容都是真实的。
诸如执行操作的权限之类的事情应该始终在服务器端进行检查,而不是其他任何事情。