基于角色的方法访问方法
-
30-09-2019 - |
题
我正在实施系统,该系统使用基于角色的类别中的不同方法访问。例如,要执行任何操作,我需要检查使用它是否可以执行的用户。
我可以用每种方法写:
if(User.IsInRole ...) {
} else {
return ... throw ... whatever
}
例如,我正在考虑通过将属性添加到此方法或其他任何解决方案中来自动化此过程?
解决方案
查看“面向方面的编程”(AOP)库,以及对 这个堆叠的问题。您可以使用AOP自动添加角色检查代码。
其他提示
只要您使用校长已经存在...
[PrincipalPermission(SecurityAction.Demand, Role = "A role available on your principal")]
public void Foo()
{
// Will throw an exception if the principal does not have the required role
// Otherwise the method will execute normally
}
在施工时间进行一次检查,如果不满足安全状况,请扔(或从工厂退回)。此后,持有对给定模型对象的引用足以证明您在早期的某个点通过了安全检查。如果您担心这可能导致 tocttou 问题,确保在应用程序定义的“游戏转向”概念结束时这些对象变得无法使用(通常是数据库事务);无论如何,这是一个好习惯。
这种安全方法称为 能力学科. 。将您的对象视为具有的框 他们内心的一些权威 (在他们的私人变量中)。通过按盒子上的按钮,您只能以对象允许您允许的方式进行量身定制的该权限的量身定制的部分。
例如,假设您正在编写带有SQL后端的日历应用程序。有 SQLTransaction
对象,该对象不会超过交易(按照上述),但它仍然具有应用程序使用的所有表的所有权利。这是您不想传递给API的用户(明确或错误地,想想SQL注入)的功能。相反,你分发了 User
对象将仅在用户表中写入该用户行的权限建模;亦是 User
可以创建,阅读,更新,删除 Appointment
对象在约会表中类似地代表有限的权威。
为了在整个API中维护RBAC,您必须确保以下内容:
不隶属于 StackOverflow