没有理由你不能同时使用它们。完成web.config非常简单有效。但总是在角色级别操作。您可以将代码版本用于您具有配置不足的用途的场景,以及当您想要显示/隐藏UI的特定部分时(还有控件版本)。
的 更新1: 强> 您已经拥有对角色的支持,因此我假设数据库实际上是将角色映射到功能。 Asp.net内置支持和它支持的可扩展性点在角色级别。如果您确实需要完全动态化,那么您需要在代码级别进行检查(.config对角色进行操作)。这需要额外的努力,因此更多地取决于系统的大小。对于大多数情况来说,坚持角色就足够了。
如果它不会有太大变化,请使用web.config。
如果要改变很多,那么使用代码方法但使用数据库使其易于修改。
更多是编码实践的一般答案,而不是与安全性相关。
我个人更喜欢声明式方法(即基于位置的web.config方法)。这使得在必要时更容易进行更改,而无需重新部署代码。
在任何情况下,我都不建议像在示例中那样使用静态字符串调用User.IsInRole();如果您的身份验证没有更改,请使用web.config声明方法。
走你在你最后一段中建议的路线是完全没问题,但我只会建议你的auth信息可能经常更改的情况,即CMS应用程序或类似的类似。
简而言之,我认为这个主题没有“最佳实践”;这真的取决于应用程序。