如何在jQuery中获取mvc c#用户角色
本文关键字:mvc 用户 角色 获取 jQuery | 更新日期: 2023-09-27 18:00:53
我在jQuery中有一个函数可以禁用基于用户角色的输入。但我不知道如何在jQuery中获得当前ASP.Net MVC用户角色。
以下是代码,但它不起作用:
$(function () {
if (Roles.IsUserInRole('user'))
{
$("#GenericName").prop("disabled", true);
$("#TradeName").prop("disabled", true);
$("#Form").prop("disabled", true);
$("#Strength").prop("disabled", true);
$("#IsBrandSubstitutionAllowed").prop("disabled", true);
$("#Route").prop("disabled", true);
$("#Dosages").prop("disabled", true);
$("#Unit").prop("disabled", true);
$("#PackTypes").prop("disabled", true);
$("#GeneratedDirection").prop("disabled", true);
$("#UserDirection").prop("disabled", true);
$("#StartDate").prop("disabled", true);
$("#EndDate").prop("disabled", true);
}
});
问题:您正在混合Javascript和Razor视图。
您所拥有的:
if (Roles.IsUserInRole('user'))
{
实际上应该写成:
var userRole = '@(Roles.IsUserInRole("user") ? "true" : "false")';
if(userRole) {
...
此代码@(Roles.IsUserInRole('user') ? "true" : "false")
将输出true
或false
文本字符串(因为它没有用单引号或双引号包装,javascript将解释为布尔值(,您可以只使用新的赋值变量。
我通常所做的是,在我的_Layout.cshtml
视图中,我添加了一个简单的全局Javascript,我可以通过我的应用程序轻松调用它。。。例如,假设该视图上有一个CurrentUser
对象(通过ViewData或Model(:
<html>
<head>
<title>Your App</title>
<styles ... >
<script>
var AppGlobal = {
"user" = {
"name" : "@(CurrentUser.Name)",
"id" : "@(CurrentUser.Guid.ToString())",
"role" : "@(CurrentUser.Role.Name)"
},
...
};
</script>
</head>
<body>
@RenderBody()
</body>
</html>
然后就更容易了,在你的情况下:
if(AppGlobal.user.role === 'user') {
...
我建议进行AJAX调用以获得用户角色。
ajax调用后,根据收到的响应,禁用/启用输入。
类似:
$.ajax({
url: 'Controller1/Action1',
dataType: 'json',
data: {},
type: 'post',
success: function(data){
if(data.user === 'user') {
// disable inputs here !
}
}
});
和你的控制器Controller1Controller
:
[HttpPost]
public JsonResult Action1(){
return Json(new {
user = // put current user role here !
});
}
此外,我建议使用ValidateAntiForgeryToken
来避免CSRF攻击,但由于没有表单,因此似乎可以。
var userRole = '@(User.IsInRole("user") ? "true" : "false")';
if(userRole) {
...
在我的情况下,我不得不使用if条件,比如这个
If(userRole=="true"){
...
}
然后代码达到了跳过它的条件。
如果您在Razor视图中编写JavaScript代码,则只能使用C#代码,如Roles.IsUserInRole('user'(。
作为一种变通方法,您可以创建一个操作来告诉您用户的权限或角色,每次需要权限时,您都需要向其发送请求。您还可以保留返回状态的副本以保存后续请求。根据您的项目,您可以更复杂地使用它,并使您的授权逻辑分离。
使用MVC 5.2.2,这对我的有效
var userRoleAdmin = '@(Request.IsAuthenticated && User.IsInRole("Admin")) ? "true" : "false")';
if(userRoleAdmin) {
...