ASP.NET页面授权……你是怎么做到的?
我目前正在研究asp.net中标准页面授权配置的替代解决方案.
如果您的文件目录需要相同的访问策略,但是如果您有许多单独的访问策略,则位置标记很难处理.我可以滚动我自己的自定义身份验证系统,但如果可以避免那可能更好. 目前我们正在为页面内容使用类似azman的权限授权系统,但我还没有找到将其与标准页面安全性集成的好方法. 有关如何做到这一点的任何建议?有没有集成azman和asp.net页面授权的解决方案?我应该注意哪些其他标准解决方案? 解决方法
我在一个巨大的应用程序中做了很多不同的权限和不同的角色,如下所示[我没有这里的代码所以我只是尝试在这里重新创建]:
我首先实现了一个名为SecuredPage的类,如下所示: public class SecuredPage : System.Web.UI.Page { // Those Permissions are mandatory,so user needs to have all of them public List MandatoryPermissions { get; set; } // Those Permissions are optional,so if the user have at least one of them,he can access public List OptionalPermissions { get; set; } protected override void OnLoad(EventArgs e) { MyUser loggedUser = (MyUser) this.User; base.OnLoad(e); foreach (Permission mandatoryPermission in MandatoryPermissions) { // if the user don't have permission,we can redirect him if (!loggedUser.HasPermission(mandatoryPermission)) { RedirectToDontHaveAccess(); break; } } bool hasAccessToThePage = false; foreach (Permission optionalPermission in OptionalPermissions) { // If the user has at least one of the permissions,he can access if (loggedUser.HasPermission(optionalPermission)) { hasAccessToThePage = true; } } if (!hasAccessToThePage) { RedirectToDontHaveAccess(); } } private void RedirectToDontHaveAccess() { throw new NotImplementedException(); } } 对于用户需要访问权限的所有页面,这将是我的BasePage. 许可是一个枚举: public enum Permission { // Usually this enum will replicate a domain table from the database EditUser = 1,SearchUserByUsername = 2,SearchUserByEmail = 3 } 而MyUser是MembershipUser的一个实现: public class MyUser : System.Web.Security.MembershipUser { internal bool HasPermission(Permission permission) { // // TODO: Check on database if the user has the permission or not // } } 然后,您在页面中唯一需要做的就是填充权限列表: public partial class EditUser : SecuredPage { protected void Page_Load(object sender,EventArgs e) { MandatoryPermissions.Add(Permission.EditUser); } } public partial class SearchUser : SecuredPage { protected void Page_Load(object sender,EventArgs e) { OptionalPermissions.Add(Permission.SearchUserByUsername); OptionalPermissions.Add(Permission.SearchUserByEmail); } } 好的,搜索示例不是那么好,但我认为你得到了图片. 整个想法是base.OnLoad(e);在权限验证之前调用,因此您只需要填写Page_Load中的权限. 我不确定这是否是最佳解决方案,但我确信它有很大帮助:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 什么是asp.net mvc中“literal”标签的等价物
- ASP.NET Identity会话cookie的安全性如何?
- 单元测试 – 如何在MVC 6中存根/模拟AuthenticationManager
- asp.net-mvc-4 – 工作单元和通用存储库与实体框架5
- 从ASP.NET应用程序直接将文件上传到Amazon S3
- asp.net-mvc-4 – Visual Studio 2012 Professional中没有M
- asp.net-mvc – 使用Razor的Jquery模板如何在text / html脚
- asp.net-mvc – Html.Actionlink作为Button效果
- asp.net-mvc – ASP.Net [HiddenInput]数据属性在Razor中用
- ASP.NET MVC自定义授权
- asp.net-mvc-3 – 关于Razor中嵌套代码块声明的问
- asp.net-mvc – DAL – > BLL < - GUI组合根.如何
- asp.net – 如何在iFrame上显示Div或Panel
- asp.net-mvc – 在需要时在CQRS中提供同步行为?
- asp.net – Webservices可以作为单身人士引起不同
- asp.net-mvc – asp.net mvc嵌套视图模型表单sum
- asp.net-web-api – 带协议缓冲区的ASP.NET WebA
- asp.net-core – 如何在部署asp.net核心应用程序
- 谈谈你最熟悉的System.DateTime[上篇]
- .Net core webapi使用httpClient发送异步请求遇到