我需要一个用于业务逻辑类中的自定义授权的工具。它必须是基于权限的系统,但我无法决定如何将授权规则应用于方法。
我的第一个想法是将自定义属性应用于方法
[NeedPermission("Users", PermissionLevel.Read)]
public IList<User> GetAllUsers()
{
// some code goes here
}
我的业务逻辑类有接口,所以我可以使用例如 Unity 拦截行为并在当前用户具有所需权限时签入运行时。如果他没有,则抛出异常。
但现在我担心这种方法的可靠性。
通常是对统一容器注入的业务逻辑类的引用。所以没有问题,因为它被配置为应用接口拦截机制。
但是如果一些开发人员会直接实例化我的业务逻辑类呢?然后不会应用拦截,即使当前用户没有执行某些操作的权限,甚至他没有经过身份验证,他也可以调用任何方法。
也有人可以更改统一容器配置,完全关闭拦截扩展。我的授权系统再次不起作用。
我看到 ASP .NET MVC 正在使用类似的授权机制。仅当请求通过标准方式 (IController.Execute) 来时,才应用授权规则。我认为在这种情况下这不是问题,因为控制器的最终用户(网络用户)无法直接访问控制器类。
在我的例子中,业务逻辑的最终用户是开发前端的程序员,他可以有意或无意地搞砸事情——创建业务逻辑类的实例并调用任何方法。
你能给我什么建议?您如何处理此类问题?
谢谢你。