我们有一个用 C# (Framework 3.5 SP1) 编写的服务器。客户使用我们的服务器 API 编写客户端应用程序。最近,我们创建了几个级别的许可方案,如基本、中级和全部。如果您拥有 Basic 许可证,那么您可以在我们的 API 上调用一些方法。同样,如果您拥有 Intermediate,您将获得一些额外的方法来调用,如果您拥有 All,则您可以调用所有方法。
当服务器启动时,它会获取许可证类型。现在,在每种方法中,我都必须检查许可证类型,并决定是继续执行该功能还是返回。
例如,InterMediateMethod()
方法只能由 Intermediate License 和 All license 使用。所以我必须做这样的事情。
public void InterMediateMethod()
{
if(licenseType == "Basic")
{
throw new Exception("Access denied");
}
}
在我看来,这是一种非常蹩脚的方法。有没有更好的方法来做到这一点?有没有通过定义一些自定义属性来实现这一点的声明方式?我查看了创建自定义 CodeAccessSecurityAttribute
但没有取得很好的成功。
最佳答案
由于您在每个方法中都添加了“if”逻辑(天知道还有什么),您可能会发现使用 PostSharp 更容易(AOP 框架)实现相同,但就我个人而言,我不喜欢这两种方法中的任何一种......
我认为如果你为每个许可证维护三个不同的分支(源代码)会更干净,这可能会增加一些维护方面的开销(也许不会),但至少保持干净和简单。
我也很感兴趣其他人对此有何评论。
好文章,我喜欢...
关于c# - 自定义代码访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2562745/