nopCommerce_4.40.3 功能实现详解--- 第18章 权限的定义实现

0056 PermissionRecord、PermissionRecordCustomerRoleMapping

    PermissionRecord类,一个权限纪录类,通过该实体类及其属性成员实现当前程序与数据库中指定表之间的数据交互操作。

    PermissionRecordCustomerRoleMapping类,一个权限纪录客户角色映射实体类,通过该实体类及其属性成员实现当前程序与数据库中指定表之间的数据交互操作。

0057 PermissionRecordBuilder、PermissionRecordCustomerRoleMappingBuilder

    PermissionRecordBuilder类,该类通过对父类中同名方法进行覆写,对权限纪录实体类、属性成员进行约束关系和规则进行相应的定义,并把这些约束有关系和规则的定义,映射到相应的数据库中新生成的一个权限纪录表及其字段上。

    PermissionRecordCustomerRoleMappingBuilder类,该类通过对父类中同名方法进行覆写,对权限纪录客户角色实体类、属性成员进行约束关系和规则进行相应的定义,并把这些约束有关系和规则的定义,映射到相应的数据库中新生成的一个权限纪录客户角色映射表及其字段上。

1、重构Nop.Data.Migrations.SchemaMigration类,通过本次重构在指定的数据库软件的相应数据库中自动生成权限纪录表、权限纪录客户角色映射表。

2、重构Nop.Data.Mapping.BaseNameCompatibility类,通过本次重构使用数据库中一些指定的表名和字段名由于程序中实体名和属性成员名,进行默认的映射生成,变更为由该类中所定义的常量字符串,进行映射生成。如果不考虑概率极低的名称冲突状况的发生,该类及其所有定义都可以被删除,并不影响程序的正常执行。

0058 IPermissionProvider、StandardPermissionProvider

    StandardPermissionProvider类,继承于IPermissionProvider接口,通过该类的定义,对权限纪录实体和权限纪录客户角色映射实体设置了一些默认的实例,为把这些实例中的数据值持久化到数据库的权限纪录表和权限纪录客户角色映射表中提供支撑。

注意:

1、可能权限权限纪录实体和权限纪录客户角色映射,所有默认实例的数据值,持久化到数据库的权限纪录表和权限纪录客户角色映射表的定义实现相对比较复杂,所以nopCommerce开发者并没有把这些定义实现,默认的定义在Nop.Services.Installation.InstallationService类中,而是单独在StandardPermissionProvider类中定义实现了这些操作。

2StandardPermissionProvider类的实例化实现,也并没有默认的定义在Nop.Web.Framework.Infrastructure.DependencyRegistrar.Register方法中,而是通过Nop.Web.Controllers.InstallController.Index方法中的语句:

  //获取标准权限提供程序具体实现类的类型实例。

            var permissionProviders = new List<Type> { typeof(StandardPermissionProvider) };

            foreach (var providerType in permissionProviders)

            {

                //获取标准权限提供程序实例。

                var provider = (IPermissionProvider)Activator.CreateInstance(providerType);

                //把标准权限提供程序实例中的默认数据,全部持久化到权限纪录表和权限纪录客户角色映射表中。

                await EngineContext.Current.Resolve<IPermissionService>().InstallPermissionsAsync(provider);

            }

实现了StandardPermissionProvider类的实例化操作,也不知道是nopCommerce开发者对自己开发技能的炫耀,还可能是StandardPermissionProvider类定义实现的特殊性,nopCommerce开发者综合取舍后的必然选择,本人更希望是后者。

3、重构Nop.Services.Customers.NopCustomerServicesDefaults类,通过本次重构在该类设置一个指定的客户角色实体的缓存键字符串,该缓存键对应一个指定的客户角色实体实例。

4、重构Nop.Services.Customers.CustomerService类,及其Nop.Services.Customers.ICustomerService接口。

0059 NopSecurityDefaults、IPermissionService、PermissionService

    NopSecurityDefaults类,该类对其属性成员实例设置一些常量,为安全相关类的定义实现提供一些实例数据的支撑。

PermissionService类,继承于IPermissionService接口,通过该类中的定义实现了页面、程序和数据库指定表之间权限纪录和权限纪录客户角色映射相关数据信息的交互操作。

注意:

为了简化实现,PermissionService类,继承于IPermissionService接口中大量的实现方法被删除。

5、重构Nop.Web.Framework.Infrastructure.DependencyRegistrar.Register方法添加语句:

      //通过.NetCore框架依赖注入容器实例的指定API方法,对权限纪录服务具体实现类进行依赖注入操作。

            services.AddScoped<IPermissionService, PermissionService>();

6、重构Nop.Web.Controllers.InstallController.Index方法,通过本次重构在程序被执行时,会把当前程序中定义的所有默认数据值,全部持久化到权限纪录表和权限纪录客户角色映射表中。

 7、按F5执行程序,在指定数据库自动生成程序到权限纪录表和权限纪录客户角色映射表及其所有默认数据值,并且所有后台页面正常显示。

    对以上功能更为具体实现和注释见21-08-21_Nop_4.40.3(019_权限的定义实现,所有页面正常显示)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值