MVC平台的一个突出特点是,您可以轻松实现安全性,以控制用户和/或角色的应用程序访问。 MVC 5中基于角色的安全性的实现已在此处发布/aspnet-mvc/1102/aspnet-mvc-role-based-security。本文介绍如何使用 Identity和IdentityRole类来创建和管理角色。该文章还创建了一个自定义AuthorizeAttribute类,用于根据用户角色提供授权。
.NET / JavaScript开发人员?点击这里下载我们的免费开发者杂志。
在MVC中,我们可以使用Authorize属性控制来自控制器的操作方法的访问。这是一个提供Users和Roles属性的动作过滤器类。这些属性可以包含逗号(,)分隔的用户或角色,因此我们可以访问多个用户或角色的操作方法。一种方法是对 用户和角色名称进行硬编码,这在生产过程中可能不是一个好主意。我们需要使用一种技术,如果角色是由管理员动态创建的,那么它们应该可以为应用程序配置。我们可以使用Web.config文件来实现它。
多个用户和角色访问操作方法 - 实现
要实现此应用程序,请从此链接访问基于角色的安全性代码/aspnet-mvc/1102/aspnet-mvc-role-based-security。下载应用程序并将其解压缩。在Visual Studio /中打开项目。App_Data文件夹包含SuperMarket.mdf。 这是包含ProductMaster表的应用程序数据库。该表的脚本如下所示:
该代码包含RoleController,其中包含用于创建角色的代码。Views文件夹的Roles子文件夹包含用于创建和显示所有角色的视图。
该的AccountController包含用于创建用户的代码。在AccountController中,HttpPost 的Register方法包含以下行,用于为用户分配角色。
步骤1:运行应用程序并创建以下角色
经理销售主管销售经理
步骤2:使用“注册视图”创建以下用户
manager@,担任经理salesmanager@,担任销售经理salessexecutive@,担任销售主管
第3步:打开ProductController类。该类包含Create和SaleProduct操作方法。这些方法由AuthLog属性应用,该属性分别具有Role属性值作为Manager和Sales Executive 。这意味着只有各个角色的用户才能访问这些方法。在这种情况下,我们的要求是我们希望Sales Executive和Sales Manager角色访问SaleProduct方法,但同时我们不希望在AuthLog属性中对这些值进行硬编码。为实现这一点,我们将按照下面显示的步骤进行操作。
步骤4:打开Web.config文件,并在configSections中添加以下自定义部分。
并添加自定义标记,如以下代码所示
上述标记定义了AppPermission键,其值为Sales Executive和Sales Manager。请注意,由于这是一个配置文件,我们可以动态地继续为AppPermission添加值。
步骤5:在CustomFilters文件夹中,我们有LogAuthFilter.cs代码文件,其中包含AuthLogAttribute类。此类派生自AuthorizeAttribute类。这包含基于角色的安全性的逻辑。修改构造函数代码,如以下代码所示:
构造函数接受名为ro
步骤6:修改SaleProduct操作方法上的AuthLog属性值,如以下代码所示
AuthLog接受AppPermissions作为参数。这将传递给AuthLogAttribute类的构造函数。构造函数中的代码将从web.config文件(Sales Executive和Sales Manager)中读取为AppPermission键定义的值。这意味着现在可以由这些角色的用户访问SaleProduct。
运行应用程序并使用salesmanager@登录并调用SaleProduct方法(单击页面顶部导航栏的“ 销售产品”链接。)销售产品视图将与salesmanager@用户一起显示为如下图所示
现在注销并使用salesexecutive@登录并单击“销售产品”链接,也将为该用户执行操作方法。