c# - 自定义代码访问权限

标签 c# licensing

我们有一个用 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/

相关文章:

windows - 在 Windows 上,应用程序在哪里存储 "I' m deactivated"?

windows - 如何保护软件免受系统日期时间更改的影响?

pdf - iTextSharp 4.1.6和5.x版本之间的区别

c# - 在 .NET 程序集或可执行文件中嵌入文本文件

c# - 我可以更改 Environment.NewLine 的值吗?

c# - GridView 从抛出异常背后的代码更新

licensing - 我可以在商业环境中使用 GPL 软件二进制文件吗?

c# - 在 Dapper Multiple Results 中,当 where 子句取决于第一个查询的结果时,如何让第二行查询工作?

c# - 将 JSON 反序列化为 C# 对象以在网格中将嵌套数组显示为字符串

version-control - 自动管理源文件中的许可证/作者/版本 header