Do define permission provider in the application contracts package.
Do provide tenant logic in order to handle multi tenant requirement.
Do integrate with permission with feature management.
publicclassProjectPlanningPermissionDefinitionProvider:PermissionDefinitionProvider{publicoverridevoidDefine(IPermissionDefinitionContextcontext){vartenancyStatus=context.ServiceProvider.GetRequiredService<IOptions<AbpMultiTenancyOptions>>().Value.IsEnabled;varprojectPlanningPermissionGroup=context.AddGroup(name:ProjectPlanningPermissions.GroupName,displayName:L("Permission:ProjectPlanning"));#region BaseModel varbaseModelPermission=projectPlanningPermissionGroup.AddPermission(name:ProjectPlanningPermissions.BaseModel.Permission,displayName:L("Permission:BaseModel"),// localization stringmultiTenancySide:tenancyStatus==true?MultiTenancySides.Tenant:MultiTenancySides.Both,isEnabled:true// by default is activated).RequireFeatures(ProjectPlanningFeatures.Enable);baseModelPermission.AddChild(name:ProjectPlanningPermissions.BaseModel.Assign,displayName:L("Permission:BaseModel:Assign"),multiTenancySide:tenancyStatus==true?MultiTenancySides.Tenant:MultiTenancySides.Both,isEnabled:true).RequireFeatures(ProjectPlanningFeatures.Enable);#endregion#region ProjectvarprojectManagementPermission=projectPlanningPermissionGroup.AddPermission(name:ProjectPlanningPermissions.Project.Permission,displayName:L("Permission:Project"),// localization stringmultiTenancySide:tenancyStatus==true?MultiTenancySides.Tenant:MultiTenancySides.Both,isEnabled:true// by default is activated).RequireFeatures(ProjectPlanningFeatures.Enable);projectManagementPermission.AddChild(name:ProjectPlanningPermissions.Project.Create,displayName:L("Permission:Project:Create"),multiTenancySide:tenancyStatus==true?MultiTenancySides.Tenant:MultiTenancySides.Both,isEnabled:true).RequireFeatures(ProjectPlanningFeatures.Enable);projectManagementPermission.AddChild(name:ProjectPlanningPermissions.Project.Edit,displayName:L("Permission:Project:Edit"),multiTenancySide:tenancyStatus==true?MultiTenancySides.Tenant:MultiTenancySides.Both,isEnabled:true).RequireFeatures(ProjectPlanningFeatures.Enable);projectManagementPermission.AddChild(name:ProjectPlanningPermissions.Project.Assign,displayName:L("Permission:Project:Assign"),multiTenancySide:tenancyStatus==true?MultiTenancySides.Tenant:MultiTenancySides.Both,isEnabled:true).RequireFeatures(ProjectPlanningFeatures.Enable);projectManagementPermission.AddChild(name:ProjectPlanningPermissions.Project.ChangeOwner,displayName:L("Permission:Project:ChangeOwner"),multiTenancySide:tenancyStatus==true?MultiTenancySides.Tenant:MultiTenancySides.Both,isEnabled:true).RequireFeatures(ProjectPlanningFeatures.Enable);projectManagementPermission.AddChild(name:ProjectPlanningPermissions.Project.Delete,displayName:L("Permission:Project:Delete"),multiTenancySide:tenancyStatus==true?MultiTenancySides.Tenant:MultiTenancySides.Both,isEnabled:true).RequireFeatures(ProjectPlanningFeatures.Enable);#endregion