我有一个使用Entity Framework的MVC 4.0应用程序。
我有一个USER表,角色表,类型表。
角色可以是两个:Administrator
,User
类型可以是8:无,Admin, Asst.Admin, ......
所以我想根据下面的类型允许访问不同的页面:
1)定义的类型:
None Con Acc Rec St Fr Admin AsAd ( <-- Types)
----------------------------------------------------------
1.a)更新客户:
None None None None Edit View Full Full ( <-- Roles)
1.b)新客户:
None None None View View Edit Full Full ( <-- Roles)
那么如何实现呢?
答案 0 :(得分:1)
您可以使用AuthorizeAttribute实现此目的:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class ActionPermissionAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
var actionName = filterContext.ActionDescriptor.ActionName;
将此属性添加到您需要授权的所有操作中 - 在控制器上添加使这更容易,甚至创建一个继承Controller
的基础控制器,然后从中继承所有控制器。
然后,您可以将控制器+操作与角色存储在DB
中 // get allowed groups for this controller+action from the database (cache this)
// get which AD groups the current user is in (or get from the DB etc)
var userGroups = HttpContext.Current.Request.LogonUserIdentity.Groups
.Translate(typeof(System.Security.Principal.NTAccount))
// check if user in in required group
如果您确实希望在每个操作的代码中定义权限,那么只需根据需要向属性和属性构造函数添加属性。
我没有完全理解你的角色与类型,但在MVC中,一切都是一个动作(方法)所以你锁定了个别动作(没有&#39;编辑&只是一个动作叫做编辑&#39;)。