我想从数据库中获得以下角色(Admin,IT,..),而不需要在操作结果上方进行硬编码。请提供任何帮助。
[Authorize(Roles = "Admin,IT")]
public ActionResult Index()
{
}
答案 0 :(得分:0)
没有任何超级简单的方法可以做到这一点。您可以将<div class="col-lg-6 col-sm-12 right">
<% @non_availabilities = NonAvailability.all %>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th class="col-md-2">Employee</th>
<th class="col-md-2">Date</th>
<th class="col-md-2">Time</th>
<th class="col-md-2">Reason</th>
</tr>
</thead>
<tbody>
<% @non_availabilities.each do |non_availability| %>
<tr>
<td class="col-md-2"><%= non_availability.employee.full_name %></td>
<td class="col-md-2"><%= non_availability.date %></td>
<td class="col-md-2"><%= non_availability.time %></td>
<td class="col-md-2"><%= non_availability.reason %></td></tr>
<% end %>
</tbody>
</table>
</div>
属性应用于控制器而不是操作,但是它仍然是对其进行“硬编码”。
您可以创建自定义的授权属性([link])1,但是您必须将“路由”值以及允许的“角色”存储在数据库中访问路线。但是,这只是转移了将手动更改从代码移入数据库的负担。
我真的不认为这应该被视为“硬编码”,因为您必须在某处声明授权,并且在不同环境中仍可以拥有具有不同权限的不同用户。除了开发人员之外,还有谁应该最了解哪些路线需要哪个授权?您是否因为更改了某处的路由而想破坏访问控制?
答案 1 :(得分:0)
创建Action finter
public class ValidationPermission : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(System.Web.HttpContext.Current.Session["UserName"] == null)
System.Web.HttpContext.Current.Response.RedirectToRoute("Login");
else{
// code check CheckPermission
}
}
}
动作控制器
[ValidationPermission(Action = ActionEnum.Read, Module = CModule)]
public ActionResult Index()
{
// something code
}
答案 2 :(得分:0)
您可以尝试这种方式
public static Role {
public static string Admin ="Admin";
public static string IT ="IT";
}
[Authorize(Roles = Role.Admin,Role.IT)]
public ActionResult Index()
{
}