C# 如何在jQuery中获得mvc用户角色
我在jQuery中有一个函数,可以根据用户角色禁用输入。但是我不知道如何在jQuery中获得当前的ASP.NETMVC用户角色 下面是代码,但它不起作用:C# 如何在jQuery中获得mvc用户角色,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我在jQuery中有一个函数,可以根据用户角色禁用输入。但是我不知道如何在jQuery中获得当前的ASP.NETMVC用户角色 下面是代码,但它不起作用: $(function () { if (Roles.IsUserInRole('user')) { $("#GenericName").prop("disabled", true); $("#TradeName").prop("disabled", true);
$(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);
}
});
如果在Razor视图中编写JavaScript代码,则只能使用C代码,如Roles.IsUserInRole(“用户”)
作为一种解决方法,您可以创建一个操作,在每次需要权限时告诉您需要向其发送请求的用户权限或角色。您还可以保留返回状态的副本以保存后续请求。根据您的项目,您可以更复杂地使用它,并将您的授权逻辑分开。我建议进行AJAX调用以获得用户角色 在ajax调用之后,根据收到的响应禁用/启用输入 比如: 您的控制器名为
Controller1Controller
:
[HttpPost]
public JsonResult Action1(){
return Json(new {
user = // put current user role here !
});
}
另外,我建议使用
ValidateAntiForgeryToken
以避免CSRF攻击,但似乎没有问题,因为没有表单。问题是:您混合了Javascript和Razor视图
你所拥有的:
if (Roles.IsUserInRole('user'))
{
实际上应写为:
var userRole = '@(Roles.IsUserInRole("user") ? "true" : "false")';
if(userRole) {
...
此代码@(Roles.IsUserInRole('user')?“true):“false”)
将输出true
或false
文本字符串(因为它没有用单引号或双引号括起来,javascript将解释为布尔值),您可以使用新的赋值变量
我通常做的是,在我的
\u Layout.cshtml
视图中,我添加了一个简单的全局Javascript,我可以通过我的应用程序轻松调用它。。。例如,假设该视图上有一个CurrentUser
对象(通过ViewData或Model):
使用MVC5.2.2,这对我来说很有效
var userRoleAdmin = '@(Request.IsAuthenticated && User.IsInRole("Admin")) ? "true" : "false")';
if(userRoleAdmin) {
...
在我的例子中,我必须像这样使用if条件
If(userRole=="true"){
...
}
然后代码命中了条件,否则它将跳过它。您面临什么错误?没有错误。它只是不起作用。谢谢你的回答。这就是我正在寻找的答案。组合jQuery和Razor视图。谢谢你的想法,谢谢你的回答。使用Json从控制器获取数据让人大开眼界。我以前从未这样做过。
if(AppGlobal.user.role === 'user') {
...
var userRoleAdmin = '@(Request.IsAuthenticated && User.IsInRole("Admin")) ? "true" : "false")';
if(userRoleAdmin) {
...
var userRole = '@(User.IsInRole("user") ? "true" : "false")';
if(userRole) {
...
If(userRole=="true"){
...
}