试图管理对网站的访问我创建了一些必要的实体

目标是为我的MVC应用程序的某些控制器的操作方法使用自定义权限属性.
[Permissions(PermissionType.SomePermissionName, CrudType.CanDelete)]
public ActionResult SomeAction()
{
}
Run Code Online (Sandbox Code Playgroud)
对于这个操作,我有两个枚举
[Flags]
public enum CrudType
{
CanCreate = 0x1,
CanRead = 0x2,
CanUpdate = 0x4,
CanDelete = 0x8,
}
[Flags]
public enum PermissionType
{
SomePermissionName = 0x1,
//...
}
Run Code Online (Sandbox Code Playgroud)
现在我想要下面的方法来检查权限
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;
}
Run Code Online (Sandbox Code Playgroud)
它运作良好,但在这里使用反射是否安全?这是一种好风格吗?
还有一个问题是关于这样的代码
var permission = PermissionService.GetByName(permissionType.ToString());
Run Code Online (Sandbox Code Playgroud)
在这里,我试图从PermissionType枚举中使用一些命名常量从数据库中获取权限对象.
在这两种情况下,正确的工作取决于枚举与某些表字段或记录之间的关系.另一方面,我有一个很好的控制逻辑机制(在我看来).这是一个好方法吗?
您如何获得所有点击以参加活动?我注意到如果你点击太快它认为你是双击并且没有将点击发送到事件处理程序.有没有办法获得所有点击?
假设我有这样的课程
class A
{
private int _x; //must be between [-10 10]
private int _y; //must be between [10 20]
}
Run Code Online (Sandbox Code Playgroud)
使用属性我有几个变量的变体
public int X
{
get { return _x; }
set
{
if (!(value >= -10 && value <= 10))
throw new Exception("Some error text");
_x = value;
}
}
Run Code Online (Sandbox Code Playgroud)
要么
public int X
{
get { return _x; }
set
{
if (!(value >= -10 && value <= 10))
return;
_x = value;
}
}
Run Code Online (Sandbox Code Playgroud)
(同样适用于_y).
在第一种情况下,我不确定我是否想要使用异常(它们很慢并且有其他已知问题).第二,我付出的代价是不使用它们的价值模糊(对于_x和_y以某种不同的方式).显然我可以在我的情况下使用(如果处理一个对象列表)就像这样
public …Run Code Online (Sandbox Code Playgroud) 我上课了
class Test
{
public string FirstProp { get; set; }
public string SecondProp { get; set; }
public string ThirdProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和一个对象列表
var list = new List<Test>
{
new Test { FirstProp = "xxx", SecondProp = "x2", ThirdProp = "x3" },
new Test { FirstProp = "xxx", SecondProp = "x21", ThirdProp = "x31" },
new Test { FirstProp = "yyy", SecondProp = "y2", ThirdProp = "y3" },
new Test { FirstProp = "yyy", SecondProp = …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×2
database ×1
double-click ×1
enums ×1
linq ×1
reflection ×1
select ×1
winforms ×1