Asp.net mvc 在.NETMVC中包装对功能的访问的方法?

Asp.net mvc 在.NETMVC中包装对功能的访问的方法?,asp.net-mvc,security,privileges,Asp.net Mvc,Security,Privileges,在.NET MVC应用程序中包装对功能的访问有哪些不同的解决方案 例如,我有六个选项卡代表应用程序的不同区域,在区域1中,可以添加、编辑、上载等等 我需要一个中心的方式来表达: 建立一些用户可以做什么的字典 包装选项卡、按钮、链接等,验证用户是否可以访问此功能并适当显示/隐藏 我知道我可以通过动作过滤器和角色来限制对动作的访问,但是从UI上呢 任何帮助都将不胜感激。我相信我不是唯一一个需要这样做的人,谢谢 首先,您还需要执行服务器端授权。任何人都可以冒充您的客户机并直接呼叫您的控制器,绕过您的客

在.NET MVC应用程序中包装对功能的访问有哪些不同的解决方案

例如,我有六个选项卡代表应用程序的不同区域,在区域1中,可以添加、编辑、上载等等

我需要一个中心的方式来表达:

  • 建立一些用户可以做什么的字典
  • 包装选项卡、按钮、链接等,验证用户是否可以访问此功能并适当显示/隐藏
  • 我知道我可以通过动作过滤器和角色来限制对动作的访问,但是从UI上呢


    任何帮助都将不胜感激。我相信我不是唯一一个需要这样做的人,谢谢

    首先,您还需要执行服务器端授权。任何人都可以冒充您的客户机并直接呼叫您的控制器,绕过您的客户端授权

    但我要做的是:

    创建AuthorizationService以集中存储此业务逻辑。它将有如下方法:

    public bool CanEditSomeObject(Guid userId, Guid objectId)
    
    在控制器内使用此AuthorizationService(或控制器引用的其他服务)构造ViewModel,其中包含view需要的所有授权信息

        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Edit(Guid id)
        {
            bool currentUser = _userService.GetUser(User.Identity.Name);
            bool canEditSomeObject = _authenticationService.CanEditSomeObject(currentUser.Id, id);
            var viewModel = new SomeObjectViewModel {CanEditSomeObject = canEditSomeObject};
            return View(viewModel);
        }
    
    使视图强类型化,并基于模型修改HTML。您可以使用局部视图之类的方法使其更干净。但是,对于当前用户无权访问的内容,您只需隐藏、禁用或不包含HTML

    <%= if (Model.UserCanEdit) Html.RenderPartial("EditForm.ascx") %>
    
    
    

    此外,如果您需要在客户端动态更改内容(例如,用户执行操作a,因此现在他们可以执行操作b),那么您可以使用JQuery操作HTML。如果愿意,您甚至可以使用JQuery呼叫控制器询问问题(参见此),但我不确定这是否必要。

    Nice!谢谢你的建议,我会试试的。