2015-05-26 73 views
0

我有asp.net MVC 4应用程序,我想显示基于角色的列。例如。以下是我的模特班。在asp.net mvc列明智的基于角色的安全4

public class Employee 
{ 
    public int Id {get;set;} 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
    public string Designation {get;set;} 
} 

在我看来,我只想显示指定列,如果用户是管理员角色。

我可以通过检查用户是否在角色中轻松地在视图上执行此操作。但那是我不想做的。我想在列基上建立安全性。所以如果我的用户没有管理权限,指定将是空字符串。

这是可能的ASP.NET MVC 4?任何帮助将不胜感激!。

+0

东西在视图中需要检查的权限,因为它不是违约,要么你使用'GridView'组件,并覆盖基于任何自定义的'render'属性,这些属性将创建在'Designation'财产,或创建一个它的扩展方法。 – balexandre

+0

谢谢你的建议!那里有没有例子? –

+0

你的网格使用什么组件或插件? – Yasser

回答

0

我不知道的方式在MVC 4要做到这一点,比其他的,如你所说,在视图中做检查。

您可以考虑的是根据用户角色呈现完全不同的视图。

当然,这可能会导致其他问题,如重复代码等,但它是一个选项。

+0

仍然是我问的目的没有送达!我希望列级别的安全性。在你的情况下,指定将仍然存在,但你没有显示它们。 –

+0

你说过:“在我看来,只有当用户具有管理员角色时,我才想显示指定列。”这样做。指定不会显示在非管理员视图中。 – ozz

+0

是的,但仍然可以看到数据。想想你的观点是由设计师开发的场景,他不知道这应该显示与否。我想限制数据。 –

0

我们在我们的项目,其中在报告表中,我们不得不根据不同的客户类型隐藏某些列的一个也有类似的要求。

由于我们的报告是使用ajax调用加载的,简单的show/hide没有任何意义。因为即使数据隐藏在html中,或者说你删除或不在html上渲染这些列,这些值仍然存在于json响应中。

相反,这是你可以做的。

根据用户类型,你可以有类和这些类必须要展现给用户的属性。

例如,你可以用一个基类

public class EmployeeBase 
{ 
    public int Id {get;set;} 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 

,然后更具体的人开始。

public class EmployeeAdmin : EmployeeBase 
{ 
    public string Designation {get;set;} 
} 

我的班级名称可能不合适,但您明白了。

+0

这是一个很好的解决方案,但是在这个解决方案中,如果有几个类可以像这样控制,那么它就可以工作。但考虑一个大型应用程序,其中有数百个模型类,然后您没有时间创建和维护。我想要一些通用的! –

+0

不可以。这个不是通用的,因为有人需要根据角色定义数据维度。每个角色一个模型班不应该是一个问题。如果你有100个角色,那么引入角色组并相应地制作类是明智的。 – Yasser