【发布时间】:2011-12-17 11:38:23
【问题描述】:
试图管理对网站的访问我创建了一些必要的实体
目标是为我的 MVC 应用程序的某些控制器的操作方法使用自定义权限属性。
[Permissions(PermissionType.SomePermissionName, CrudType.CanDelete)]
public ActionResult SomeAction()
{
}
对于这个操作,我有两个枚举
[Flags]
public enum CrudType
{
CanCreate = 0x1,
CanRead = 0x2,
CanUpdate = 0x4,
CanDelete = 0x8,
}
[Flags]
public enum PermissionType
{
SomePermissionName = 0x1,
//...
}
现在我想要下面的方法来检查权限
public static bool CanAccess(RolePermissions rp, CrudType crudType)
{
var pInfo = rp.GetType().GetProperties();
var res = pInfo.FirstOrDefault(x => x.Name == crudType.ToString());
if(res != null)
{
return Convert.ToBoolean(res.GetValue(rp, null));
}
return false;
}
效果很好,但在这里使用反射是否安全?是不是很好的风格?
还有一个问题是关于这样一段代码
var permission = PermissionService.GetByName(permissionType.ToString());
在这里,我尝试使用PermissionType 枚举中的一些命名常量从数据库中获取权限对象。
在这两种情况下,正确的工作取决于枚举与某些表字段或记录之间的关系。另一方面,我有一个很好的控制逻辑的机制(在我看来)。
这是一个好方法吗?
【问题讨论】:
-
这在 ASP.NET Membership APi 中不可用吗?
-
我真的不喜欢会员资格。此外,我想使用自己的类、自己的表、自己的控件等
-
除了自己的类、自己的表格、自己的控件之外,还有什么不喜欢的理由?当我想转向会员 APi :(
-
好的。第一个原因here。第二个——我可以自己控制一切对我来说很方便。当然这是一个品味问题......
-
哇。一个经过深思熟虑,陈述良好的问题,具有正确的代码。现在这是一个很好的问题。我只是希望我能给你一个好的答案......不幸的是,我的反射符很弱。
标签: c# database asp.net-mvc-3 reflection enums