Repository: featbit/featbit (language: python)

Issue:
Localization/ff detail targeting
<!--
# Instructions

1. Pick a meaningful title for your pull request. (Use sentence case. Keep it short < 70 characters)
  - Prefix the title with an emoji to categorize what is being done. (Copy-paste the emoji from the list below.)
  - Assign the appropriate label(s) to the pull request. (Use one of the labels from the list below.)
  
2. Enter a succinct description that says why the PR is necessary, and what it does.
  - Implement aspect X
  - Leave out feature Y because of A
  - Improve performance by B
  - Improve accessibility by C

3. Provide clear testing instructions that include any pertinent information, i.e. seat, roles, etc.
4. Include screenshots of your changes if they impact the UI (Before & After).
5. Update the preview link with your pull request number.
6. Include any JIRA tickets, design documents, GitHub issues, or other related items to the bottom of the PR.

# Available labels
UI
API
Evaluation Server
OLAP

# Emojis for categorizing pull requests

✨ New feature or functionality
🐛 Bugfix
🔥 P0 fix
✅ Tests
🚀 Performance improvements
🖍 CSS / Styling
📖 Documentation
🏗 Infrastructure / Tooling / Builds / CI
↩️ Reverting a previous change
🧹 Refactoring / Housekeeping
🔧 Package Upgrades / Maintenance
🗑️ Deleting code

-->



Discussion / hints:

Fix patch:
diff --git a/infra/mongodb/docker-entrypoint-initdb.d/seed.js b/infra/mongodb/docker-entrypoint-initdb.d/seed.js
index 1ae4d2860..880feb7e3 100644
--- a/infra/mongodb/docker-entrypoint-initdb.d/seed.js
+++ b/infra/mongodb/docker-entrypoint-initdb.d/seed.js
@@ -3,15 +3,262 @@ db = db.getSiblingDB('featbit')
 
 print('seed started...')
 
+// seed ids
+const userId = UUID("4526975f-4f6b-4420-9dde-84c276148832")
+const organizationId = UUID("67e2b2db-01ec-4725-9fd9-e5cc3d3a6b74")
+const projectId = UUID("5a2eaddd-34fb-4d59-831a-bd7fe427b802")
+
+const groupId = UUID("4dbea94d-a1cb-45e3-bab7-c5bf8f956f44")
+const ownerPolicyId = UUID("98881f6a-5c6c-4277-bcf7-fda94c538785")
+const administratorPolicyId = UUID("3e961f0f-6fd4-4cf4-910f-52d356f8cc08")
+const developerPolicyId = UUID("66f3687f-939d-4257-bd3f-c3553d39e1b6")
+const testerPolicyId = UUID("65244ccc-d336-44b2-b4ee-b24482ea6037")
+
 // seed user
 print('clean and seed collection: Users')
 db.Users.deleteMany({})
 db.Users.insertOne(
     {
-        _id: "a9013900-6c44-4aad-8e9a-568c2a429972",
+        _id: userId,
         email: "test@featbit.com",
         password: "AQAAAAEAACcQAAAAELDHEjCrDQrmnAXU5C//mOLvUBJ7lnVFEMMFxNMDIIrF7xK8JDQKUifU3HH4gexNAQ==",
-        createAt: new Date()
+        createAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+print('collection seeded: Users')
+
+// seed organization
+print('clean and seed collection: Organizations')
+db.Organizations.deleteMany({})
+db.Organizations.insertOne(
+    {
+        _id: organizationId,
+        name: "playground",
+        initialized: true,
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+print('collection seeded: Organizations')
+
+// seed organization users
+print('clean and seed collection: OrganizationUsers')
+db.OrganizationUsers.deleteMany({})
+db.OrganizationUsers.insertOne(
+    {
+        _id: UUID(),
+        organizationId: organizationId,
+        userId: userId,
+        invitorId: null,
+        initialPassword: "",
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+print('collection seeded: OrganizationUsers')
+
+// seed project
+print('clean and seed collection: Projects')
+db.Projects.deleteMany({})
+db.Projects.insertOne(
+    {
+        _id: projectId,
+        organizationId: organizationId,
+        name: "frontend",
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+print('collection seeded: Projects')
+
+// seed environments
+print('clean and seed collection: Environments')
+db.Environments.deleteMany({})
+db.Environments.insertOne(
+    {
+        _id: UUID(),
+        projectId: projectId,
+        name: "prod",
+        description: "production environment",
+        secret: "MGU3LTNjNzUtNCUyMDIyMDkyNjAxMzgwNF9fNDZfXzkzX181N19fZGVmYXVsdF8zMDgwNw==",
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+db.Environments.insertOne(
+    {
+        _id: UUID(),
+        projectId: projectId,
+        name: "dev",
+        description: "development environment",
+        secret: "NzJlLTlkOGEtNCUyMDIyMDkyNjAxMzkyNF9fNDZfXzkzX181N19fZGVmYXVsdF9iYTA1NA==",
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+print('collection seeded: Environments')
+
+// seed group
+print('clean and seed collection: Groups')
+db.Groups.deleteMany({})
+db.Groups.insertOne(
+    {
+        _id: groupId,
+        organizationId: organizationId,
+        name: "tester-group",
+        description: "a group for all testers",
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+print('collection seeded: Groups')
+
+// seed group member
+print('clean and seed collection: GroupMembers')
+db.GroupMembers.deleteMany({})
+db.GroupMembers.insertOne(
+    {
+        _id: UUID(),
+        groupId: groupId,
+        organizationId: organizationId,
+        memberId: userId,
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+print('collection seeded: GroupMembers')
+
+// seed policy
+print('clean and seed collection: Policies')
+db.Policies.deleteMany({})
+db.Policies.insertOne(
+    {
+        _id: testerPolicyId,
+        organizationId: organizationId,
+        name: "tester-policy",
+        description: "a policy for all testers",
+        type: "CustomerManaged",
+        statements: [],
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+db.Policies.insertOne(
+    {
+        _id: ownerPolicyId,
+        organizationId: null,
+        name: "Owner",
+        description: "Contains all permissions. This policy is granted to the user who created the organization",
+        type: "SysManaged",
+        statements: [
+            {
+                _id: "754a689a-3280-4769-b312-10958718402f",
+                resourceType: "*",
+                effect: "allow",
+                actions: ["*"],
+                resources: ["*"]
+            }
+        ],
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+db.Policies.insertOne(
+    {
+        _id: administratorPolicyId,
+        organizationId: null,
+        name: "Administrator",
+        description: "Contains all the permissions required by an administrator",
+        type: "SysManaged",
+        statements: [
+            {
+                _id: "f73fa469-a97e-465d-8d6f-3f53bf4fe290",
+                resourceType: "general",
+                effect: "allow",
+                actions: ["CanManageIAM"],
+                resources: ["iam"]
+            },
+            {
+                _id: "ba619151-0504-4deb-8341-e2db0ea99407",
+                resourceType: "general",
+                effect: "allow",
+                actions: ["UpdateOrgName"],
+                resources: ["account"]
+            },
+            {
+                _id: "6164bebe-756e-4021-9e5b-f7e497ab893b",
+                resourceType: "general",
+                effect: "allow",
+                actions: [
+                    "ListProjects",
+                    "CreateProject",
+                    "DeleteProject",
+                    "AccessEnvs",
+                    "UpdateProjectInfo",
+                    "ListEnvs",
+                    "CreateEnv",
+                    "DeleteEnv",
+                    "UpdateEnvInfo"
+                ],
+                resources: ["project"]
+            }
+        ],
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+db.Policies.insertOne(
+    {
+        _id: developerPolicyId,
+        organizationId: null,
+        name: "Developer",
+        description: "Contains all the permissions required by a developer",
+        type: "SysManaged",
+        statements: [
+            {
+                _id: "a53eb0a6-9056-4932-b5db-f34cbcf7bdb7",
+                resourceType: "general",
+                effect: "allow",
+                actions: [
+                    "AccessEnvs",
+                    "ListProjects",
+                    "ListEnvs"
+                ],
+                resources: ["project"]
+            }
+        ],
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+print('collection seeded: Policies')
+
+// seed group policy
+print('clean and seed collection: GroupPolicies')
+db.GroupPolicies.deleteMany({})
+db.GroupPolicies.insertOne(
+    {
+        _id: UUID(),
+        groupId: groupId,
+        policyId: testerPolicyId,
+        createdAt: new Date(),
+        updatedAt: new Date()
+    }
+)
+print('collection seeded: GroupPolicies')
+
+// seed member policy
+print('clean and seed collection: MemberPolicies')
+db.MemberPolicies.deleteMany({})
+db.MemberPolicies.insertOne(
+    {
+        _id: UUID(),
+        organizationId: organizationId,
+        policyId: ownerPolicyId,
+        memberId: userId,
+        createdAt: new Date(),
+        updatedAt: new Date()
     }
 )
-print('collection seeded: Users')
\ No newline at end of file
+print('collection seeded: GroupPolicies')
\ No newline at end of file
diff --git a/modules/back-end/src/Api/Controllers/GroupController.cs b/modules/back-end/src/Api/Controllers/GroupController.cs
new file mode 100644
index 000000000..6766576ca
--- /dev/null
+++ b/modules/back-end/src/Api/Controllers/GroupController.cs
@@ -0,0 +1,80 @@
+using Application.Bases.Models;
+using Application.Groups;
+
+namespace Api.Controllers;
+
+[Route("api/v{version:apiVersion}/organizations/{organizationId:guid}/groups")]
+public class GroupController : ApiControllerBase
+{
+    [HttpGet("{id:guid}")]
+    public async Task<ApiResponse<GroupVm>> GetAsync(Guid id)
+    {
+        var request = new GetGroup
+        {
+            Id = id
+        };
+
+        var group = await Mediator.Send(request);
+        return Ok(group);
+    }
+    
+    [HttpGet]
+    public async Task<ApiResponse<PagedResult<GroupVm>>> GetListAsync(Guid organizationId, [FromQuery] GroupFilter filter)
+    {
+        var request = new GetGroupList
+        {
+            OrganizationId = organizationId,
+            Filter = filter
+        };
+        
+        var groups = await Mediator.Send(request);
+        return Ok(groups);
+    }
+    
+    [HttpGet("is-name-used")]
+    public async Task<ApiResponse<bool>> IsNameUsedAsync(Guid organizationId, string name)
+    {
+        var request = new IsGroupNameUsed
+        {
+            OrganizationId = organizationId,
+            Name = name
+        };
+
+        var result = await Mediator.Send(request);
+        return Ok(result);
+    }
+    
+    [HttpGet("{groupId:guid}/members")]
+    public async Task<ApiResponse<PagedResult<GroupMemberVm>>> GetMembersAsync(
+        Guid organizationId, 
+        Guid groupId, 
+        [FromQuery] GroupMemberFilter filter)
+    {
+        var request = new GetGroupMember
+        {
+            OrganizationId = organizationId,
+            GroupId = groupId,
+            Filter = filter
+        };
+
+        var groupMembers = await Mediator.Send(request);
+        return Ok(groupMembers);
+    }
+    
+    [HttpGet("{groupId:guid}/policies")]
+    public async Task<ApiResponse<PagedResult<GroupPolicyVm>>> GetPoliciesAsync(
+        Guid organizationId, 
+        Guid groupId, 
+        [FromQuery] GroupPolicyFilter filter)
+    {
+        var request = new GetGroupPolicy
+        {
+            OrganizationId = organizationId,
+            GroupId = groupId,
+            Filter = filter
+        };
+
+        var policies = await Mediator.Send(request);
+        return Ok(policies);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Api/Controllers/MemberController.cs b/modules/back-end/src/Api/Controllers/MemberController.cs
new file mode 100644
index 000000000..a85aca6af
--- /dev/null
+++ b/modules/back-end/src/Api/Controllers/MemberController.cs
@@ -0,0 +1,101 @@
+using Application.Bases.Models;
+using Application.Members;
+using Application.Policies;
+
+namespace Api.Controllers;
+
+[Route("api/v{version:apiVersion}/organizations/{organizationId:guid}/members")]
+public class MemberController : ApiControllerBase
+{
+    [HttpGet("{memberId:guid}")]
+    public async Task<ApiResponse<MemberVm>> GetAsync(Guid organizationId, Guid memberId)
+    {
+        var request = new GetMember
+        {
+            OrganizationId = organizationId,
+            MemberId = memberId
+        };
+
+        var member = await Mediator.Send(request);
+        return Ok(member);
+    }
+
+    [HttpGet]
+    public async Task<ApiResponse<PagedResult<MemberVm>>> GetListAsync(
+        Guid organizationId,
+        [FromQuery] MemberFilter filter)
+    {
+        var request = new GetMemberList
+        {
+            OrganizationId = organizationId,
+            Filter = filter
+        };
+
+        var members = await Mediator.Send(request);
+        return Ok(members);
+    }
+
+    [HttpGet("{memberId:guid}/groups")]
+    public async Task<ApiResponse<PagedResult<MemberGroupVm>>> GetGroupsAsync(
+        Guid organizationId,
+        Guid memberId,
+        [FromQuery] MemberGroupFilter filter)
+    {
+        var request = new GetMemberGroup
+        {
+            OrganizationId = organizationId,
+            MemberId = memberId,
+            Filter = filter
+        };
+
+        var groups = await Mediator.Send(request);
+        return Ok(groups);
+    }
+
+    [HttpGet("{memberId:guid}/policies")]
+    public async Task<ApiResponse<IEnumerable<PolicyVm>>> GetPoliciesAsync(Guid organizationId, Guid memberId)
+    {
+        var request = new GetMemberPolicy
+        {
+            OrganizationId = organizationId,
+            MemberId = memberId
+        };
+
+        var vms = await Mediator.Send(request);
+        return Ok(vms);
+    }
+
+    [HttpGet("{memberId:guid}/direct-policies")]
+    public async Task<ApiResponse<PagedResult<MemberPolicyVm>>> GetDirectPoliciesAsync(
+        Guid organizationId,
+        Guid memberId,
+        [FromQuery] MemberPolicyFilter filter)
+    {
+        var request = new GetDirectPolicies
+        {
+            OrganizationId = organizationId,
+            MemberId = memberId,
+            Filter = filter
+        };
+
+        var policies = await Mediator.Send(request);
+        return Ok(policies);
+    }
+
+    [HttpGet("{memberId:guid}/inherited-policies")]
+    public async Task<ApiResponse<PagedResult<InheritedMemberPolicy>>> GetInheritedPoliciesAsync(
+        Guid organizationId,
+        Guid memberId,
+        [FromQuery] InheritedMemberPolicyFilter filter)
+    {
+        var request = new GetInheritedPolicies
+        {
+            OrganizationId = organizationId,
+            MemberId = memberId,
+            Filter = filter
+        };
+
+        var policies = await Mediator.Send(request);
+        return Ok(policies);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Api/Controllers/OrganizationController.cs b/modules/back-end/src/Api/Controllers/OrganizationController.cs
new file mode 100644
index 000000000..c319ccc9d
--- /dev/null
+++ b/modules/back-end/src/Api/Controllers/OrganizationController.cs
@@ -0,0 +1,33 @@
+using Application.Organizations;
+
+namespace Api.Controllers;
+
+[Route("api/v{version:apiVersion}/organizations")]
+public class OrganizationController : ApiControllerBase
+{
+    [HttpGet("{id:guid}")]
+    public async Task<ApiResponse<OrganizationVm>> GetAsync(Guid id)
+    {
+        var request = new GetOrganization { Id = id };
+
+        var vm = await Mediator.Send(request);
+        return Ok(vm);
+    }
+
+    [HttpGet]
+    public async Task<ApiResponse<IEnumerable<OrganizationVm>>> GetListAsync()
+    {
+        var request = new GetOrganizationList { UserId = CurrentUser.Id };
+
+        var vms = await Mediator.Send(request);
+        return Ok(vms);
+    }
+
+    [HttpPost]
+    public async Task<ApiResponse<OrganizationVm>> CreateAsync(CreateOrganization request)
+    {
+        var organization = await Mediator.Send(request);
+
+        return Ok(organization);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Api/Controllers/PolicyController.cs b/modules/back-end/src/Api/Controllers/PolicyController.cs
new file mode 100644
index 000000000..2476b0b68
--- /dev/null
+++ b/modules/back-end/src/Api/Controllers/PolicyController.cs
@@ -0,0 +1,82 @@
+using Application.Bases.Models;
+using Application.Policies;
+
+namespace Api.Controllers;
+
+[Route("api/v{version:apiVersion}/organizations/{organizationId:guid}/policies")]
+public class PolicyController : ApiControllerBase
+{
+    [HttpGet("{id:guid}")]
+    public async Task<ApiResponse<PolicyVm>> GetAsync(Guid id)
+    {
+        var request = new GetPolicy
+        {
+            Id = id
+        };
+
+        var policy = await Mediator.Send(request);
+        return Ok(policy);
+    }
+
+    [HttpGet]
+    public async Task<ApiResponse<PagedResult<PolicyVm>>> GetListAsync(
+        Guid organizationId,
+        [FromQuery] PolicyFilter filter)
+    {
+        var request = new GetPolicyList
+        {
+            OrganizationId = organizationId,
+            Filter = filter
+        };
+
+        var policies = await Mediator.Send(request);
+        return Ok(policies);
+    }
+
+    [HttpGet("is-name-used")]
+    public async Task<ApiResponse<bool>> IsNameUsedAsync(Guid organizationId, string name)
+    {
+        var request = new IsPolicyNameUsed
+        {
+            OrganizationId = organizationId,
+            Name = name
+        };
+
+        var isNameUsed = await Mediator.Send(request);
+        return Ok(isNameUsed);
+    }
+
+    [HttpGet("{policyId:guid}/groups")]
+    public async Task<ApiResponse<PagedResult<PolicyGroup>>> GetGroupsAsync(
+        Guid organizationId,
+        Guid policyId,
+        [FromQuery] PolicyGroupFilter filter)
+    {
+        var request = new GetPolicyGroup
+        {
+            OrganizationId = organizationId,
+            PolicyId = policyId,
+            Filter = filter
+        };
+
+        var groups = await Mediator.Send(request);
+        return Ok(groups);
+    }
+
+    [HttpGet("{policyId:guid}/members")]
+    public async Task<ApiResponse<PagedResult<PolicyMember>>> GetMembersAsync(
+        Guid organizationId,
+        Guid policyId,
+        [FromQuery] PolicyMemberFilter filter)
+    {
+        var request = new GetPolicyMember
+        {
+            OrganizationId = organizationId,
+            PolicyId = policyId,
+            Filter = filter
+        };
+
+        var members = await Mediator.Send(request);
+        return Ok(members);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Api/Controllers/ProjectController.cs b/modules/back-end/src/Api/Controllers/ProjectController.cs
new file mode 100644
index 000000000..dbddce66e
--- /dev/null
+++ b/modules/back-end/src/Api/Controllers/ProjectController.cs
@@ -0,0 +1,33 @@
+using Application.Projects;
+using Domain.Projects;
+
+namespace Api.Controllers;
+
+[Route("api/v{version:apiVersion}/organizations/{organizationId:guid}/projects")]
+public class ProjectController : ApiControllerBase
+{
+    [HttpGet]
+    [Route("{projectId:guid}")]
+    public async Task<ApiResponse<ProjectWithEnvs>> GetAsync(Guid projectId)
+    {
+        var request = new GetProject
+        {
+            Id = projectId
+        };
+
+        var project = await Mediator.Send(request);
+        return Ok(project);
+    }
+    
+    [HttpGet]
+    public async Task<ApiResponse<IEnumerable<ProjectWithEnvs>>> GetListAsync(Guid organizationId)
+    {
+        var request = new GetProjectList
+        {
+            OrganizationId = organizationId
+        };
+
+        var projects = await Mediator.Send(request);
+        return Ok(projects);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Api/Controllers/UserController.cs b/modules/back-end/src/Api/Controllers/UserController.cs
new file mode 100644
index 000000000..5f4f7bb35
--- /dev/null
+++ b/modules/back-end/src/Api/Controllers/UserController.cs
@@ -0,0 +1,16 @@
+using Application.Users;
+
+namespace Api.Controllers;
+
+public class UserController : ApiControllerBase
+{
+    [HttpGet]
+    [Route("profile")]
+    public async Task<ApiResponse<Profile>> GetProfileAsync()
+    {
+        var request = new GetProfile { Id = CurrentUser.Id };
+        
+        var profile = await Mediator.Send(request);
+        return Ok(profile);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Api/Middlewares/ApiExceptionMiddlewareExtension.cs b/modules/back-end/src/Api/Middlewares/ApiExceptionMiddlewareExtension.cs
index 9ab9c69fd..4413100c5 100644
--- a/modules/back-end/src/Api/Middlewares/ApiExceptionMiddlewareExtension.cs
+++ b/modules/back-end/src/Api/Middlewares/ApiExceptionMiddlewareExtension.cs
@@ -1,5 +1,6 @@
 using Api.Controllers;
 using Application.Bases;
+using Application.Bases.Exceptions;
 using Microsoft.AspNetCore.Diagnostics;
 
 namespace Api.Middlewares;
@@ -36,6 +37,17 @@ private static async Task HandleExceptionAsync(HttpContext context)
 
             return;
         }
+        
+        // EntityNotFound exception
+        if (ex is EntityNotFoundException entityNotFoundException)
+        {
+            httpResponse.StatusCode = StatusCodes.Status404NotFound;
+
+            var entityNotFoundError = ApiResponse<object>.Error(ErrorCodes.ResourceNotFound);
+            await httpResponse.WriteAsJsonAsync(entityNotFoundError);
+
+            return;
+        }
 
         // other exception
         httpResponse.StatusCode = StatusCodes.Status500InternalServerError;
diff --git a/modules/back-end/src/Api/Setup/ApiAuthorizationResultHandler.cs b/modules/back-end/src/Api/Setup/ApiAuthorizationResultHandler.cs
index fc39feccc..b64a0c50c 100644
--- a/modules/back-end/src/Api/Setup/ApiAuthorizationResultHandler.cs
+++ b/modules/back-end/src/Api/Setup/ApiAuthorizationResultHandler.cs
@@ -1,4 +1,5 @@
 using Api.Controllers;
+using Application.Bases;
 using Microsoft.AspNetCore.Authentication.JwtBearer;
 using Microsoft.AspNetCore.Authorization.Policy;
 using Microsoft.Net.Http.Headers;
@@ -25,7 +26,7 @@ public async Task HandleAsync(
             );
             response.StatusCode = StatusCodes.Status401Unauthorized;
 
-            var authError = ApiResponse<object>.Error("authentication failed");
+            var authError = ApiResponse<object>.Error(ErrorCodes.Unauthorized);
             await response.WriteAsJsonAsync(authError);
 
             return;
diff --git a/modules/back-end/src/Application/Application.csproj b/modules/back-end/src/Application/Application.csproj
index 986cbad5b..6ce50e4af 100644
--- a/modules/back-end/src/Application/Application.csproj
+++ b/modules/back-end/src/Application/Application.csproj
@@ -3,7 +3,7 @@
     <PropertyGroup>
         <TargetFramework>net6.0</TargetFramework>
         <ImplicitUsings>enable</ImplicitUsings>
-        <Nullable>enable</Nullable>
+        <Nullable>disable</Nullable>
     </PropertyGroup>
 
     <ItemGroup>
@@ -11,6 +11,7 @@
     </ItemGroup>
 
     <ItemGroup>
+      <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="11.0.0" />
       <PackageReference Include="FluentValidation.AspNetCore" Version="11.2.2" />
       <PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="10.0.1" />
     </ItemGroup>
diff --git a/modules/back-end/src/Application/Bases/ErrorCodes.cs b/modules/back-end/src/Application/Bases/ErrorCodes.cs
index fe24b188b..85602a597 100644
--- a/modules/back-end/src/Application/Bases/ErrorCodes.cs
+++ b/modules/back-end/src/Application/Bases/ErrorCodes.cs
@@ -4,6 +4,10 @@ public static class ErrorCodes
 {
     // general
     public const string InternalServerError = nameof(InternalServerError);
+    public const string Unauthorized = nameof(Unauthorized);
+    
+    // application
+    public const string ResourceNotFound = nameof(ResourceNotFound);
     
     // identity error codes
     public const string EmailIsRequired = nameof(EmailIsRequired);
@@ -11,4 +15,7 @@ public static class ErrorCodes
     public const string EmailNotExist = nameof(EmailNotExist);
     public const string PasswordIsRequired = nameof(PasswordIsRequired);
     public const string PasswordMismatch = nameof(PasswordMismatch);
+    
+    // common
+    public const string NameIsRequired = nameof(NameIsRequired);
 }
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Bases/Exceptions/EntityNotFoundException.cs b/modules/back-end/src/Application/Bases/Exceptions/EntityNotFoundException.cs
new file mode 100644
index 000000000..84e847e91
--- /dev/null
+++ b/modules/back-end/src/Application/Bases/Exceptions/EntityNotFoundException.cs
@@ -0,0 +1,9 @@
+namespace Application.Bases.Exceptions;
+
+public class EntityNotFoundException : Exception
+{
+    public EntityNotFoundException(string resource, string key)
+        : base($"resource \"{resource}\" ({key}) was not found.")
+    {
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Bases/Models/PagedRequest.cs b/modules/back-end/src/Application/Bases/Models/PagedRequest.cs
new file mode 100644
index 000000000..1dc10da61
--- /dev/null
+++ b/modules/back-end/src/Application/Bases/Models/PagedRequest.cs
@@ -0,0 +1,8 @@
+namespace Application.Bases.Models;
+
+public class PagedRequest
+{
+    public int PageIndex { get; set; } = 0;
+
+    public int PageSize { get; set; } = 10;
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Bases/Models/PagedResult.cs b/modules/back-end/src/Application/Bases/Models/PagedResult.cs
new file mode 100644
index 000000000..110f593b2
--- /dev/null
+++ b/modules/back-end/src/Application/Bases/Models/PagedResult.cs
@@ -0,0 +1,14 @@
+namespace Application.Bases.Models;
+
+public class PagedResult<TValue>
+{
+    public long TotalCount { get; set; }
+
+    public IReadOnlyList<TValue> Items { get; set; }
+
+    public PagedResult(long totalCount, IReadOnlyList<TValue> items)
+    {
+        TotalCount = totalCount;
+        Items = items;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/ConfigureServices.cs b/modules/back-end/src/Application/ConfigureServices.cs
index efb0b5f4b..a20ba2710 100644
--- a/modules/back-end/src/Application/ConfigureServices.cs
+++ b/modules/back-end/src/Application/ConfigureServices.cs
@@ -2,13 +2,17 @@
 using Application.Bases.Behaviours;
 using Application.Users;
 
-// ReSharper disable once CheckNamespace
+// ReSharper disable CheckNamespace
 namespace Microsoft.Extensions.DependencyInjection;
+// ReSharper restore CheckNamespace
 
 public static class ConfigureServices
 {
     public static IServiceCollection AddApplicationServices(this IServiceCollection services)
     {
+        // automapper
+        services.AddAutoMapper(Assembly.GetExecutingAssembly());
+        
         // fluent validation
         ValidatorOptions.Global.DefaultRuleLevelCascadeMode = CascadeMode.Stop;
         services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly());
diff --git a/modules/back-end/src/Application/Groups/GetGroup.cs b/modules/back-end/src/Application/Groups/GetGroup.cs
new file mode 100644
index 000000000..a8f7f22fa
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/GetGroup.cs
@@ -0,0 +1,25 @@
+namespace Application.Groups;
+
+public class GetGroup : IRequest<GroupVm>
+{
+    public Guid Id { get; set; }
+}
+
+public class GetGroupHandler : IRequestHandler<GetGroup, GroupVm>
+{
+    private readonly IGroupService _service;
+    private readonly IMapper _mapper;
+
+    public GetGroupHandler(IGroupService service, IMapper mapper)
+    {
+        _service = service;
+        _mapper = mapper;
+    }
+    
+    public async Task<GroupVm> Handle(GetGroup request, CancellationToken cancellationToken)
+    {
+        var group = await _service.GetAsync(request.Id);
+
+        return _mapper.Map<GroupVm>(group);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/GetGroupList.cs b/modules/back-end/src/Application/Groups/GetGroupList.cs
new file mode 100644
index 000000000..c3057de9e
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/GetGroupList.cs
@@ -0,0 +1,29 @@
+using Application.Bases.Models;
+
+namespace Application.Groups;
+
+public class GetGroupList : IRequest<PagedResult<GroupVm>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public GroupFilter Filter { get; set; }
+}
+
+public class GetGroupListHandler : IRequestHandler<GetGroupList, PagedResult<GroupVm>>
+{
+    private readonly IGroupService _service;
+    private readonly IMapper _mapper;
+
+    public GetGroupListHandler(IGroupService service, IMapper mapper)
+    {
+        _service = service;
+        _mapper = mapper;
+    }
+    
+    public async Task<PagedResult<GroupVm>> Handle(GetGroupList request, CancellationToken cancellationToken)
+    {
+        var groups = await _service.GetListAsync(request.OrganizationId, request.Filter);
+
+        return _mapper.Map<PagedResult<GroupVm>>(groups);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/GetGroupMember.cs b/modules/back-end/src/Application/Groups/GetGroupMember.cs
new file mode 100644
index 000000000..ae5148720
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/GetGroupMember.cs
@@ -0,0 +1,30 @@
+using Application.Bases.Models;
+
+namespace Application.Groups;
+
+public class GetGroupMember : IRequest<PagedResult<GroupMemberVm>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid GroupId { get; set; }
+
+    public GroupMemberFilter Filter { get; set; }
+}
+
+public class GetGroupMemberHandler : IRequestHandler<GetGroupMember, PagedResult<GroupMemberVm>>
+{
+    private readonly IGroupService _service;
+
+    public GetGroupMemberHandler(IGroupService service)
+    {
+        _service = service;
+    }
+
+    public async Task<PagedResult<GroupMemberVm>> Handle(GetGroupMember request, CancellationToken cancellationToken)
+    {
+        var members =
+            await _service.GetMembersAsync(request.OrganizationId, request.GroupId, request.Filter);
+
+        return members;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/GetGroupPolicy.cs b/modules/back-end/src/Application/Groups/GetGroupPolicy.cs
new file mode 100644
index 000000000..ac714a1f9
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/GetGroupPolicy.cs
@@ -0,0 +1,30 @@
+using Application.Bases.Models;
+
+namespace Application.Groups;
+
+public class GetGroupPolicy : IRequest<PagedResult<GroupPolicyVm>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid GroupId { get; set; }
+
+    public GroupPolicyFilter Filter { get; set; }
+}
+
+public class GetGroupPolicyHandler : IRequestHandler<GetGroupPolicy, PagedResult<GroupPolicyVm>>
+{
+    private readonly IGroupService _service;
+
+    public GetGroupPolicyHandler(IGroupService service)
+    {
+        _service = service;
+    }
+
+    public async Task<PagedResult<GroupPolicyVm>> Handle(GetGroupPolicy request, CancellationToken cancellationToken)
+    {
+        var policies =
+            await _service.GetPoliciesAsync(request.OrganizationId, request.GroupId, request.Filter);
+
+        return policies;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/GroupFilter.cs b/modules/back-end/src/Application/Groups/GroupFilter.cs
new file mode 100644
index 000000000..d554261f6
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/GroupFilter.cs
@@ -0,0 +1,8 @@
+using Application.Bases.Models;
+
+namespace Application.Groups;
+
+public class GroupFilter : PagedRequest
+{
+    public string Name { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/GroupMemberFilter.cs b/modules/back-end/src/Application/Groups/GroupMemberFilter.cs
new file mode 100644
index 000000000..c11e14267
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/GroupMemberFilter.cs
@@ -0,0 +1,10 @@
+using Application.Bases.Models;
+
+namespace Application.Groups;
+
+public class GroupMemberFilter : PagedRequest
+{
+    public string SearchText { get; set; }
+
+    public bool GetAllMembers { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/GroupMemberVm.cs b/modules/back-end/src/Application/Groups/GroupMemberVm.cs
new file mode 100644
index 000000000..415eb1f76
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/GroupMemberVm.cs
@@ -0,0 +1,10 @@
+namespace Application.Groups;
+
+public class GroupMemberVm
+{
+    public Guid Id { get; set; }
+
+    public string Email { get; set; }
+
+    public bool IsGroupMember { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/GroupPolicyFilter.cs b/modules/back-end/src/Application/Groups/GroupPolicyFilter.cs
new file mode 100644
index 000000000..133c146cf
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/GroupPolicyFilter.cs
@@ -0,0 +1,10 @@
+using Application.Bases.Models;
+
+namespace Application.Groups;
+
+public class GroupPolicyFilter : PagedRequest
+{
+    public string Name { get; set; }
+
+    public bool GetAllPolicies { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/GroupPolicyVm.cs b/modules/back-end/src/Application/Groups/GroupPolicyVm.cs
new file mode 100644
index 000000000..a58538567
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/GroupPolicyVm.cs
@@ -0,0 +1,14 @@
+namespace Application.Groups;
+
+public class GroupPolicyVm
+{
+    public string Id { get; set; }
+
+    public string Name { get; set; }
+
+    public string Type { get; set; }
+
+    public string Description { get; set; }
+
+    public bool IsGroupPolicy { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/GroupVm.cs b/modules/back-end/src/Application/Groups/GroupVm.cs
new file mode 100644
index 000000000..68fd7a480
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/GroupVm.cs
@@ -0,0 +1,12 @@
+namespace Application.Groups;
+
+public class GroupVm
+{
+    public string Id { get; set; }
+
+    public string Name { get; set; }
+
+    public string Description { get; set; }
+
+    public DateTime? UpdatedAt { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/IsGroupNameUsed.cs b/modules/back-end/src/Application/Groups/IsGroupNameUsed.cs
new file mode 100644
index 000000000..6323c8c57
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/IsGroupNameUsed.cs
@@ -0,0 +1,25 @@
+namespace Application.Groups;
+
+public class IsGroupNameUsed : IRequest<bool>
+{
+    public Guid OrganizationId { get; set; }
+
+    public string Name { get; set; }
+}
+
+public class IsGroupNameUsedHandler : IRequestHandler<IsGroupNameUsed, bool>
+{
+    private readonly IGroupService _service;
+
+    public IsGroupNameUsedHandler(IGroupService service)
+    {
+        _service = service;
+    }
+    
+    public async Task<bool> Handle(IsGroupNameUsed request, CancellationToken cancellationToken)
+    {
+        var isNameUsed = await _service.IsNameUsedAsync(request.OrganizationId, request.Name);
+
+        return isNameUsed;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Groups/MapperProfile.cs b/modules/back-end/src/Application/Groups/MapperProfile.cs
new file mode 100644
index 000000000..d95700881
--- /dev/null
+++ b/modules/back-end/src/Application/Groups/MapperProfile.cs
@@ -0,0 +1,13 @@
+using Application.Bases.Models;
+using Domain.Groups;
+
+namespace Application.Groups;
+
+public class MapperProfile : Profile
+{
+    public MapperProfile()
+    {
+        CreateMap<Group, GroupVm>();
+        CreateMap<PagedResult<Group>, PagedResult<GroupVm>>();
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Identity/LoginByEmail.cs b/modules/back-end/src/Application/Identity/LoginByEmail.cs
index 1eae2ac7b..e959a3549 100644
--- a/modules/back-end/src/Application/Identity/LoginByEmail.cs
+++ b/modules/back-end/src/Application/Identity/LoginByEmail.cs
@@ -1,5 +1,4 @@
 using Application.Bases;
-using Application.Services;
 using Microsoft.Extensions.Logging;
 
 namespace Application.Identity;
diff --git a/modules/back-end/src/Application/Members/GetDirectPolicies.cs b/modules/back-end/src/Application/Members/GetDirectPolicies.cs
new file mode 100644
index 000000000..55d0e2d6f
--- /dev/null
+++ b/modules/back-end/src/Application/Members/GetDirectPolicies.cs
@@ -0,0 +1,30 @@
+using Application.Bases.Models;
+
+namespace Application.Members;
+
+public class GetDirectPolicies : IRequest<PagedResult<MemberPolicyVm>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid MemberId { get; set; }
+
+    public MemberPolicyFilter Filter { get; set; }
+}
+
+public class GetDirectPoliciesHandler : IRequestHandler<GetDirectPolicies, PagedResult<MemberPolicyVm>>
+{
+    private readonly IMemberService _service;
+
+    public GetDirectPoliciesHandler(IMemberService service)
+    {
+        _service = service;
+    }
+
+    public async Task<PagedResult<MemberPolicyVm>> Handle(GetDirectPolicies request, CancellationToken cancellationToken)
+    {
+        var policies =
+            await _service.GetDirectPoliciesAsync(request.OrganizationId, request.MemberId, request.Filter);
+
+        return policies;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/GetInheritedPolicies.cs b/modules/back-end/src/Application/Members/GetInheritedPolicies.cs
new file mode 100644
index 000000000..4d2d50937
--- /dev/null
+++ b/modules/back-end/src/Application/Members/GetInheritedPolicies.cs
@@ -0,0 +1,30 @@
+using Application.Bases.Models;
+
+namespace Application.Members;
+
+public class GetInheritedPolicies : IRequest<PagedResult<InheritedMemberPolicy>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid MemberId { get; set; }
+
+    public InheritedMemberPolicyFilter Filter { get; set; }
+}
+
+public class GetInheritedPoliciesHandler : IRequestHandler<GetInheritedPolicies, PagedResult<InheritedMemberPolicy>>
+{
+    private readonly IMemberService _service;
+
+    public GetInheritedPoliciesHandler(IMemberService service)
+    {
+        _service = service;
+    }
+
+    public async Task<PagedResult<InheritedMemberPolicy>> Handle(GetInheritedPolicies request, CancellationToken cancellationToken)
+    {
+        var policies =
+            await _service.GetInheritedPoliciesAsync(request.OrganizationId, request.MemberId, request.Filter);
+
+        return policies;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/GetMember.cs b/modules/back-end/src/Application/Members/GetMember.cs
new file mode 100644
index 000000000..ad0bbe5bf
--- /dev/null
+++ b/modules/back-end/src/Application/Members/GetMember.cs
@@ -0,0 +1,27 @@
+namespace Application.Members;
+
+public class GetMember : IRequest<MemberVm>
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid MemberId { get; set; }
+}
+
+public class GetMemberHandler : IRequestHandler<GetMember, MemberVm>
+{
+    private readonly IMemberService _service;
+    private readonly IMapper _mapper;
+
+    public GetMemberHandler(IMemberService service, IMapper mapper)
+    {
+        _service = service;
+        _mapper = mapper;
+    }
+    
+    public async Task<MemberVm> Handle(GetMember request, CancellationToken cancellationToken)
+    {
+        var member = await _service.GetAsync(request.OrganizationId, request.MemberId);
+
+        return _mapper.Map<MemberVm>(member);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/GetMemberGroup.cs b/modules/back-end/src/Application/Members/GetMemberGroup.cs
new file mode 100644
index 000000000..0fd0714b1
--- /dev/null
+++ b/modules/back-end/src/Application/Members/GetMemberGroup.cs
@@ -0,0 +1,32 @@
+using Application.Bases.Models;
+
+namespace Application.Members;
+
+public class GetMemberGroup : IRequest<PagedResult<MemberGroupVm>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid MemberId { get; set; }
+
+    public MemberGroupFilter Filter { get; set; }
+}
+
+public class GetMemberGroupHandler : IRequestHandler<GetMemberGroup, PagedResult<MemberGroupVm>>
+{
+    private readonly IMemberService _service;
+    private readonly IMapper _mapper;
+
+    public GetMemberGroupHandler(IMemberService service, IMapper mapper)
+    {
+        _service = service;
+        _mapper = mapper;
+    }
+    
+    public async Task<PagedResult<MemberGroupVm>> Handle(GetMemberGroup request, CancellationToken cancellationToken)
+    {
+        var groups = 
+            await _service.GetGroupsAsync(request.OrganizationId, request.MemberId, request.Filter);
+
+        return _mapper.Map<PagedResult<MemberGroupVm>>(groups);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/GetMemberList.cs b/modules/back-end/src/Application/Members/GetMemberList.cs
new file mode 100644
index 000000000..e90c9fc23
--- /dev/null
+++ b/modules/back-end/src/Application/Members/GetMemberList.cs
@@ -0,0 +1,42 @@
+using Application.Bases.Models;
+using Application.Users;
+
+namespace Application.Members;
+
+public class GetMemberList : PagedRequest, IRequest<PagedResult<MemberVm>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public MemberFilter Filter { get; set; }
+}
+
+public class GetMemberListHandler : IRequestHandler<GetMemberList, PagedResult<MemberVm>>
+{
+    private readonly IMemberService _service;
+    private readonly ICurrentUser _currentUser;
+    private readonly IMapper _mapper;
+
+    public GetMemberListHandler(IMemberService service, ICurrentUser currentUser, IMapper mapper)
+    {
+        _service = service;
+        _currentUser = currentUser;
+        _mapper = mapper;
+    }
+
+    public async Task<PagedResult<MemberVm>> Handle(GetMemberList request, CancellationToken cancellationToken)
+    {
+        var members =
+            await _service.GetListAsync(request.OrganizationId, request.Filter);
+        
+        foreach (var member in members.Items)
+        {
+            // only invitor can view member's initial password
+            if (_currentUser.Id != member.InvitorId)
+            {
+                member.InitialPassword = null;
+            }
+        }
+
+        return _mapper.Map<PagedResult<MemberVm>>(members);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/GetMemberPolicy.cs b/modules/back-end/src/Application/Members/GetMemberPolicy.cs
new file mode 100644
index 000000000..21c942634
--- /dev/null
+++ b/modules/back-end/src/Application/Members/GetMemberPolicy.cs
@@ -0,0 +1,29 @@
+using Application.Policies;
+
+namespace Application.Members;
+
+public class GetMemberPolicy : IRequest<IEnumerable<PolicyVm>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid MemberId { get; set; }
+}
+
+public class GetMemberPolicyHandler : IRequestHandler<GetMemberPolicy, IEnumerable<PolicyVm>>
+{
+    private readonly IMemberService _service;
+    private readonly IMapper _mapper;
+
+    public GetMemberPolicyHandler(IMemberService service, IMapper mapper)
+    {
+        _service = service;
+        _mapper = mapper;
+    }
+    
+    public async Task<IEnumerable<PolicyVm>> Handle(GetMemberPolicy request, CancellationToken cancellationToken)
+    {
+        var policies = await _service.GetPoliciesAsync(request.OrganizationId, request.MemberId);
+
+        return _mapper.Map<IEnumerable<PolicyVm>>(policies);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/InheritedMemberPolicy.cs b/modules/back-end/src/Application/Members/InheritedMemberPolicy.cs
new file mode 100644
index 000000000..104691e41
--- /dev/null
+++ b/modules/back-end/src/Application/Members/InheritedMemberPolicy.cs
@@ -0,0 +1,14 @@
+namespace Application.Members;
+
+public class InheritedMemberPolicy
+{
+    public Guid Id { get; set; }
+
+    public string Name { get; set; }
+
+    public string Type { get; set; }
+
+    public string Description { get; set; }
+
+    public string GroupName { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/InheritedMemberPolicyFilter.cs b/modules/back-end/src/Application/Members/InheritedMemberPolicyFilter.cs
new file mode 100644
index 000000000..f06a9cb7c
--- /dev/null
+++ b/modules/back-end/src/Application/Members/InheritedMemberPolicyFilter.cs
@@ -0,0 +1,8 @@
+using Application.Bases.Models;
+
+namespace Application.Members;
+
+public class InheritedMemberPolicyFilter : PagedRequest
+{
+    public string Name { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/MapperProfile.cs b/modules/back-end/src/Application/Members/MapperProfile.cs
new file mode 100644
index 000000000..a60d929f2
--- /dev/null
+++ b/modules/back-end/src/Application/Members/MapperProfile.cs
@@ -0,0 +1,20 @@
+using Application.Bases.Models;
+using Application.Policies;
+using Domain.Members;
+using Domain.Policies;
+
+namespace Application.Members;
+
+public class MapperProfile : Profile
+{
+    public MapperProfile()
+    {
+        CreateMap<Member, MemberVm>();
+        CreateMap<MemberGroup, MemberGroupVm>();
+        CreateMap<Policy, PolicyVm>();
+
+        CreateMap<PagedResult<Member>, PagedResult<MemberVm>>();
+        CreateMap<PagedResult<MemberGroup>, PagedResult<MemberGroupVm>>();
+        CreateMap<PagedResult<Policy>, PagedResult<PolicyVm>>();
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/MemberFilter.cs b/modules/back-end/src/Application/Members/MemberFilter.cs
new file mode 100644
index 000000000..6733d1ed9
--- /dev/null
+++ b/modules/back-end/src/Application/Members/MemberFilter.cs
@@ -0,0 +1,8 @@
+using Application.Bases.Models;
+
+namespace Application.Members;
+
+public class MemberFilter : PagedRequest
+{
+    public string SearchText { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/MemberGroupFilter.cs b/modules/back-end/src/Application/Members/MemberGroupFilter.cs
new file mode 100644
index 000000000..3b16e3b22
--- /dev/null
+++ b/modules/back-end/src/Application/Members/MemberGroupFilter.cs
@@ -0,0 +1,10 @@
+using Application.Bases.Models;
+
+namespace Application.Members;
+
+public class MemberGroupFilter : PagedRequest
+{
+    public string Name { get; set; }
+
+    public bool GetAllGroups { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/MemberGroupVm.cs b/modules/back-end/src/Application/Members/MemberGroupVm.cs
new file mode 100644
index 000000000..ddce0ec4a
--- /dev/null
+++ b/modules/back-end/src/Application/Members/MemberGroupVm.cs
@@ -0,0 +1,14 @@
+namespace Application.Members;
+
+public class MemberGroupVm
+{
+    public string Id { get; set; }
+
+    public string Name { get; set; }
+
+    public string Description { get; set; }
+
+    public string MemberId { get; set; }
+
+    public bool IsGroupMember { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/MemberPolicyFilter.cs b/modules/back-end/src/Application/Members/MemberPolicyFilter.cs
new file mode 100644
index 000000000..b82caceb9
--- /dev/null
+++ b/modules/back-end/src/Application/Members/MemberPolicyFilter.cs
@@ -0,0 +1,10 @@
+using Application.Bases.Models;
+
+namespace Application.Members;
+
+public class MemberPolicyFilter : PagedRequest
+{
+    public string Name { get; set; }
+
+    public bool GetAllPolicies { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/MemberPolicyVm.cs b/modules/back-end/src/Application/Members/MemberPolicyVm.cs
new file mode 100644
index 000000000..28a5eb04b
--- /dev/null
+++ b/modules/back-end/src/Application/Members/MemberPolicyVm.cs
@@ -0,0 +1,14 @@
+namespace Application.Members;
+
+public class MemberPolicyVm
+{
+    public string Id { get; set; }
+
+    public string Name { get; set; }
+
+    public string Type { get; set; }
+
+    public string Description { get; set; }
+
+    public bool IsMemberPolicy { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Members/MemberVm.cs b/modules/back-end/src/Application/Members/MemberVm.cs
new file mode 100644
index 000000000..9654c505d
--- /dev/null
+++ b/modules/back-end/src/Application/Members/MemberVm.cs
@@ -0,0 +1,14 @@
+namespace Application.Members;
+
+public class MemberVm
+{
+    public string Id { get; set; }
+
+    public string Email { get; set; }
+
+    public string InvitorId { get; set; }
+
+    public string InitialPassword { get; set; }
+
+    public IEnumerable<MemberGroupVm> Groups { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Organizations/CreateOrganization.cs b/modules/back-end/src/Application/Organizations/CreateOrganization.cs
new file mode 100644
index 000000000..33a487fe2
--- /dev/null
+++ b/modules/back-end/src/Application/Organizations/CreateOrganization.cs
@@ -0,0 +1,51 @@
+using Application.Bases;
+using Application.Users;
+using Domain.Organizations;
+using Domain.Policies;
+
+namespace Application.Organizations;
+
+public class CreateOrganization : IRequest<OrganizationVm>
+{
+    public string Name { get; set; }
+}
+
+public class CreateOrganizationValidator : AbstractValidator<CreateOrganization>
+{
+    public CreateOrganizationValidator()
+    {
+        RuleFor(x => x.Name)
+            .NotEmpty().WithErrorCode(ErrorCodes.NameIsRequired);
+    }
+}
+
+public class CreateOrganizationHandler : IRequestHandler<CreateOrganization, OrganizationVm>
+{
+    private readonly IOrganizationService _service;
+    private readonly ICurrentUser _currentUser;
+    private readonly IMapper _mapper;
+
+    public CreateOrganizationHandler(
+        IOrganizationService service, 
+        ICurrentUser currentUser, 
+        IMapper mapper)
+    {
+        _service = service;
+        _currentUser = currentUser;
+        _mapper = mapper;
+    }
+    
+    public async Task<OrganizationVm> Handle(CreateOrganization request, CancellationToken cancellationToken)
+    {
+        // add new organization
+        var organization = new Organization(request.Name);
+        await _service.AddAsync(organization);
+        
+        // add user to organization
+        var organizationUser = new OrganizationUser(organization.Id, _currentUser.Id);
+        var policies = new[] { BuiltInPolicy.Owner };
+        await _service.AddUserAsync(organizationUser, policies: policies);
+
+        return _mapper.Map<OrganizationVm>(organization);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Organizations/GetOrganization.cs b/modules/back-end/src/Application/Organizations/GetOrganization.cs
new file mode 100644
index 000000000..18050fa76
--- /dev/null
+++ b/modules/back-end/src/Application/Organizations/GetOrganization.cs
@@ -0,0 +1,25 @@
+namespace Application.Organizations;
+
+public class GetOrganization : IRequest<OrganizationVm>
+{
+    public Guid Id { get; set; }
+}
+
+public class GetOrganizationHandler : IRequestHandler<GetOrganization, OrganizationVm>
+{
+    private readonly IOrganizationService _organizationService;
+    private readonly IMapper _mapper;
+
+    public GetOrganizationHandler(IOrganizationService organizationService, IMapper mapper)
+    {
+        _organizationService = organizationService;
+        _mapper = mapper;
+    }
+    
+    public async Task<OrganizationVm> Handle(GetOrganization request, CancellationToken cancellationToken)
+    {
+        var organization = await _organizationService.GetAsync(request.Id);
+
+        return _mapper.Map<OrganizationVm>(organization);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Organizations/GetOrganizationList.cs b/modules/back-end/src/Application/Organizations/GetOrganizationList.cs
new file mode 100644
index 000000000..f295d5ff4
--- /dev/null
+++ b/modules/back-end/src/Application/Organizations/GetOrganizationList.cs
@@ -0,0 +1,25 @@
+namespace Application.Organizations;
+
+public class GetOrganizationList : IRequest<IEnumerable<OrganizationVm>>
+{
+    public Guid UserId { get; set; }
+}
+
+public class GetOrganizationListHandler : IRequestHandler<GetOrganizationList, IEnumerable<OrganizationVm>>
+{
+    private readonly IOrganizationService _organizationService;
+    private readonly IMapper _mapper;
+
+    public GetOrganizationListHandler(IOrganizationService organizationService, IMapper mapper)
+    {
+        _organizationService = organizationService;
+        _mapper = mapper;
+    }
+
+    public async Task<IEnumerable<OrganizationVm>> Handle(GetOrganizationList request, CancellationToken cancellationToken)
+    {
+        var organizations = await _organizationService.GetListAsync(request.UserId);
+
+        return _mapper.Map<IEnumerable<OrganizationVm>>(organizations);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Organizations/MapperProfile.cs b/modules/back-end/src/Application/Organizations/MapperProfile.cs
new file mode 100644
index 000000000..8311c351d
--- /dev/null
+++ b/modules/back-end/src/Application/Organizations/MapperProfile.cs
@@ -0,0 +1,11 @@
+using Domain.Organizations;
+
+namespace Application.Organizations;
+
+public class MapperProfile : Profile
+{
+    public MapperProfile()
+    {
+        CreateMap<Organization, OrganizationVm>();
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Organizations/OrganizationVm.cs b/modules/back-end/src/Application/Organizations/OrganizationVm.cs
new file mode 100644
index 000000000..18ef35d1b
--- /dev/null
+++ b/modules/back-end/src/Application/Organizations/OrganizationVm.cs
@@ -0,0 +1,10 @@
+namespace Application.Organizations;
+
+public class OrganizationVm
+{
+    public string Id { get; set; }
+
+    public string Name { get; set; }
+
+    public bool Initialized { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/GetPolicy.cs b/modules/back-end/src/Application/Policies/GetPolicy.cs
new file mode 100644
index 000000000..c839f1ec7
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/GetPolicy.cs
@@ -0,0 +1,25 @@
+namespace Application.Policies;
+
+public class GetPolicy : IRequest<PolicyVm>
+{
+    public Guid Id { get; set; }
+}
+
+public class GetPolicyHandler : IRequestHandler<GetPolicy, PolicyVm>
+{
+    private readonly IPolicyService _service;
+    private readonly IMapper _mapper;
+
+    public GetPolicyHandler(IPolicyService service, IMapper mapper)
+    {
+        _service = service;
+        _mapper = mapper;
+    }
+    
+    public async Task<PolicyVm> Handle(GetPolicy request, CancellationToken cancellationToken)
+    {
+        var policy = await _service.GetAsync(request.Id);
+
+        return _mapper.Map<PolicyVm>(policy);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/GetPolicyGroup.cs b/modules/back-end/src/Application/Policies/GetPolicyGroup.cs
new file mode 100644
index 000000000..be2cc2387
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/GetPolicyGroup.cs
@@ -0,0 +1,30 @@
+using Application.Bases.Models;
+
+namespace Application.Policies;
+
+public class GetPolicyGroup : IRequest<PagedResult<PolicyGroup>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid PolicyId { get; set; }
+
+    public PolicyGroupFilter Filter { get; set; }
+}
+
+public class GetPolicyGroupHandler : IRequestHandler<GetPolicyGroup, PagedResult<PolicyGroup>>
+{
+    private readonly IPolicyService _service;
+
+    public GetPolicyGroupHandler(IPolicyService service)
+    {
+        _service = service;
+    }
+
+    public async Task<PagedResult<PolicyGroup>> Handle(GetPolicyGroup request, CancellationToken cancellationToken)
+    {
+        var groups =
+            await _service.GetGroupsAsync(request.OrganizationId, request.PolicyId, request.Filter);
+
+        return groups;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/GetPolicyList.cs b/modules/back-end/src/Application/Policies/GetPolicyList.cs
new file mode 100644
index 000000000..e31d091d9
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/GetPolicyList.cs
@@ -0,0 +1,29 @@
+using Application.Bases.Models;
+
+namespace Application.Policies;
+
+public class GetPolicyList : IRequest<PagedResult<PolicyVm>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public PolicyFilter Filter { get; set; }
+}
+
+public class GetPolicyListHandler : IRequestHandler<GetPolicyList, PagedResult<PolicyVm>>
+{
+    private readonly IPolicyService _service;
+    private readonly IMapper _mapper;
+
+    public GetPolicyListHandler(IPolicyService service, IMapper mapper)
+    {
+        _service = service;
+        _mapper = mapper;
+    }
+    
+    public async Task<PagedResult<PolicyVm>> Handle(GetPolicyList request, CancellationToken cancellationToken)
+    {
+        var policies = await _service.GetListAsync(request.OrganizationId, request.Filter);
+
+        return _mapper.Map<PagedResult<PolicyVm>>(policies);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/GetPolicyMember.cs b/modules/back-end/src/Application/Policies/GetPolicyMember.cs
new file mode 100644
index 000000000..fa730d584
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/GetPolicyMember.cs
@@ -0,0 +1,28 @@
+using Application.Bases.Models;
+
+namespace Application.Policies;
+
+public class GetPolicyMember : IRequest<PagedResult<PolicyMember>>
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid PolicyId { get; set; }
+
+    public PolicyMemberFilter Filter { get; set; }
+}
+
+public class GetPolicyMemberHandler : IRequestHandler<GetPolicyMember, PagedResult<PolicyMember>>
+{
+    private readonly IPolicyService _service;
+
+    public GetPolicyMemberHandler(IPolicyService service)
+    {
+        _service = service;
+    }
+    
+    public async Task<PagedResult<PolicyMember>> Handle(GetPolicyMember request, CancellationToken cancellationToken)
+    {
+        var members = await _service.GetMembersAsync(request.OrganizationId, request.PolicyId, request.Filter);
+        return members;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/IsPolicyNameUsed.cs b/modules/back-end/src/Application/Policies/IsPolicyNameUsed.cs
new file mode 100644
index 000000000..9f6c90a03
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/IsPolicyNameUsed.cs
@@ -0,0 +1,25 @@
+namespace Application.Policies;
+
+public class IsPolicyNameUsed : IRequest<bool>
+{
+    public Guid OrganizationId { get; set; }
+
+    public string Name { get; set; }
+}
+
+public class IsPolicyNameUsedHandler : IRequestHandler<IsPolicyNameUsed, bool>
+{
+    private readonly IPolicyService _service;
+
+    public IsPolicyNameUsedHandler(IPolicyService service)
+    {
+        _service = service;
+    }
+    
+    public async Task<bool> Handle(IsPolicyNameUsed request, CancellationToken cancellationToken)
+    {
+        var isNameUsed = await _service.IsNameUsedAsync(request.OrganizationId, request.Name);
+        
+        return isNameUsed;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/PolicyFilter.cs b/modules/back-end/src/Application/Policies/PolicyFilter.cs
new file mode 100644
index 000000000..2b937efe6
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/PolicyFilter.cs
@@ -0,0 +1,8 @@
+using Application.Bases.Models;
+
+namespace Application.Policies;
+
+public class PolicyFilter : PagedRequest
+{
+    public string Name { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/PolicyGroup.cs b/modules/back-end/src/Application/Policies/PolicyGroup.cs
new file mode 100644
index 000000000..35648d7bf
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/PolicyGroup.cs
@@ -0,0 +1,12 @@
+namespace Application.Policies;
+
+public class PolicyGroup
+{
+    public Guid Id { get; set; }
+
+    public string Name { get; set; }
+
+    public string Description { get; set; }
+
+    public bool IsPolicyGroup { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/PolicyGroupFilter.cs b/modules/back-end/src/Application/Policies/PolicyGroupFilter.cs
new file mode 100644
index 000000000..2ff60a2b9
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/PolicyGroupFilter.cs
@@ -0,0 +1,10 @@
+using Application.Bases.Models;
+
+namespace Application.Policies;
+
+public class PolicyGroupFilter : PagedRequest
+{
+    public string Name { get; set; }
+
+    public bool GetAllGroups { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/PolicyMember.cs b/modules/back-end/src/Application/Policies/PolicyMember.cs
new file mode 100644
index 000000000..a3dcfaca3
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/PolicyMember.cs
@@ -0,0 +1,10 @@
+namespace Application.Policies;
+
+public class PolicyMember
+{
+    public Guid Id { get; set; }
+
+    public string Email { get; set; }
+
+    public bool IsPolicyMember { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/PolicyMemberFilter.cs b/modules/back-end/src/Application/Policies/PolicyMemberFilter.cs
new file mode 100644
index 000000000..1e60a13c9
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/PolicyMemberFilter.cs
@@ -0,0 +1,10 @@
+using Application.Bases.Models;
+
+namespace Application.Policies;
+
+public class PolicyMemberFilter : PagedRequest
+{
+    public string SearchText { get; set; }
+
+    public bool GetAllMembers { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Policies/PolicyVm.cs b/modules/back-end/src/Application/Policies/PolicyVm.cs
new file mode 100644
index 000000000..a0044fa8e
--- /dev/null
+++ b/modules/back-end/src/Application/Policies/PolicyVm.cs
@@ -0,0 +1,18 @@
+using Domain.Policies;
+
+namespace Application.Policies;
+
+public class PolicyVm
+{
+    public string Id { get; set; }
+
+    public string Name { get; set; }
+        
+    public string Type { get; set; }
+
+    public string Description { get; set; }
+
+    public IEnumerable<PolicyStatement> Statements { get; set; }
+
+    public DateTime? UpdatedAt { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Projects/GetProject.cs b/modules/back-end/src/Application/Projects/GetProject.cs
new file mode 100644
index 000000000..3f0c89275
--- /dev/null
+++ b/modules/back-end/src/Application/Projects/GetProject.cs
@@ -0,0 +1,23 @@
+using Domain.Projects;
+
+namespace Application.Projects;
+
+public class GetProject : IRequest<ProjectWithEnvs>
+{
+    public Guid Id { get; set; }
+}
+
+public class GetProjectHandler : IRequestHandler<GetProject, ProjectWithEnvs>
+{
+    private readonly IProjectService _service;
+
+    public GetProjectHandler(IProjectService service)
+    {
+        _service = service;
+    }
+    
+    public async Task<ProjectWithEnvs> Handle(GetProject request, CancellationToken cancellationToken)
+    {
+        return await _service.GetAsync(request.Id);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Projects/GetProjectList.cs b/modules/back-end/src/Application/Projects/GetProjectList.cs
new file mode 100644
index 000000000..28e764310
--- /dev/null
+++ b/modules/back-end/src/Application/Projects/GetProjectList.cs
@@ -0,0 +1,23 @@
+using Domain.Projects;
+
+namespace Application.Projects;
+
+public class GetProjectList : IRequest<IEnumerable<ProjectWithEnvs>>
+{
+    public Guid OrganizationId { get; set; }
+}
+
+public class GetProjectListHandler : IRequestHandler<GetProjectList, IEnumerable<ProjectWithEnvs>>
+{
+    private readonly IProjectService _service;
+
+    public GetProjectListHandler(IProjectService service)
+    {
+        _service = service;
+    }
+    
+    public async Task<IEnumerable<ProjectWithEnvs>> Handle(GetProjectList request, CancellationToken cancellationToken)
+    {
+        return await _service.GetListAsync(request.OrganizationId);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Services/IGroupService.cs b/modules/back-end/src/Application/Services/IGroupService.cs
new file mode 100644
index 000000000..78b67df79
--- /dev/null
+++ b/modules/back-end/src/Application/Services/IGroupService.cs
@@ -0,0 +1,18 @@
+using Application.Bases.Models;
+using Application.Groups;
+using Domain.Groups;
+
+namespace Application.Services;
+
+public interface IGroupService
+{
+    Task<Group> GetAsync(Guid id);
+
+    Task<PagedResult<Group>> GetListAsync(Guid organizationId, GroupFilter groupFilter);
+
+    Task<bool> IsNameUsedAsync(Guid organizationId, string name);
+
+    Task<PagedResult<GroupMemberVm>> GetMembersAsync(Guid organizationId, Guid groupId, GroupMemberFilter filter);
+
+    Task<PagedResult<GroupPolicyVm>> GetPoliciesAsync(Guid organizationId, Guid groupId, GroupPolicyFilter filter);
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Services/IMemberService.cs b/modules/back-end/src/Application/Services/IMemberService.cs
new file mode 100644
index 000000000..308f3459f
--- /dev/null
+++ b/modules/back-end/src/Application/Services/IMemberService.cs
@@ -0,0 +1,23 @@
+using Application.Bases.Models;
+using Application.Members;
+using Domain.Members;
+using Domain.Policies;
+
+namespace Application.Services;
+
+public interface IMemberService
+{
+    Task<Member> GetAsync(Guid organizationId, Guid memberId);
+
+    Task<PagedResult<Member>> GetListAsync(Guid organizationId, MemberFilter filter);
+
+    Task<List<MemberGroup>> GetGroupsAsync(Guid organizationId, IEnumerable<Guid> memberIds);
+    
+    Task<PagedResult<MemberGroup>> GetGroupsAsync(Guid organizationId, Guid memberId, MemberGroupFilter filter);
+
+    Task<IEnumerable<Policy>> GetPoliciesAsync(Guid organizationId, Guid memberId);
+    
+    Task<PagedResult<MemberPolicyVm>> GetDirectPoliciesAsync(Guid organizationId, Guid memberId, MemberPolicyFilter filter);
+    
+    Task<PagedResult<InheritedMemberPolicy>> GetInheritedPoliciesAsync(Guid organizationId, Guid memberId, InheritedMemberPolicyFilter filter);
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Services/IOrganizationService.cs b/modules/back-end/src/Application/Services/IOrganizationService.cs
new file mode 100644
index 000000000..fa46d6be4
--- /dev/null
+++ b/modules/back-end/src/Application/Services/IOrganizationService.cs
@@ -0,0 +1,18 @@
+using Domain.Organizations;
+
+namespace Application.Services;
+
+public interface IOrganizationService
+{
+    Task<Organization> GetAsync(Guid id);
+
+    Task<IEnumerable<Organization>> GetListAsync(Guid userId);
+
+    Task<Organization> AddAsync(Organization organization);
+
+    Task<OrganizationUser> AddUserAsync(
+        OrganizationUser organizationUser,
+        ICollection<Guid> policies = null,
+        ICollection<Guid> groups = null
+    );
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Services/IPolicyService.cs b/modules/back-end/src/Application/Services/IPolicyService.cs
new file mode 100644
index 000000000..f479a8b2e
--- /dev/null
+++ b/modules/back-end/src/Application/Services/IPolicyService.cs
@@ -0,0 +1,18 @@
+using Application.Bases.Models;
+using Application.Policies;
+using Domain.Policies;
+
+namespace Application.Services;
+
+public interface IPolicyService
+{
+    Task<Policy> GetAsync(Guid id);
+
+    Task<PagedResult<Policy>> GetListAsync(Guid organizationId, PolicyFilter filter);
+
+    Task<bool> IsNameUsedAsync(Guid organizationId, string name);
+
+    Task<PagedResult<PolicyGroup>> GetGroupsAsync(Guid organizationId, Guid policyId, PolicyGroupFilter filter);
+
+    Task<PagedResult<PolicyMember>> GetMembersAsync(Guid organizationId, Guid policyId, PolicyMemberFilter filter);
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Services/IProjectService.cs b/modules/back-end/src/Application/Services/IProjectService.cs
new file mode 100644
index 000000000..ab8acf97c
--- /dev/null
+++ b/modules/back-end/src/Application/Services/IProjectService.cs
@@ -0,0 +1,10 @@
+using Domain.Projects;
+
+namespace Application.Services;
+
+public interface IProjectService
+{
+    Task<ProjectWithEnvs> GetAsync(Guid id);
+
+    Task<IEnumerable<ProjectWithEnvs>> GetListAsync(Guid organizationId);
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Services/IUserService.cs b/modules/back-end/src/Application/Services/IUserService.cs
new file mode 100644
index 000000000..916bb1fa1
--- /dev/null
+++ b/modules/back-end/src/Application/Services/IUserService.cs
@@ -0,0 +1,8 @@
+using Domain.Users;
+
+namespace Application.Services;
+
+public interface IUserService
+{
+    Task<User> GetAsync(Guid id);
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Users/CurrentUser.cs b/modules/back-end/src/Application/Users/CurrentUser.cs
index 5594c8988..98e86bf56 100644
--- a/modules/back-end/src/Application/Users/CurrentUser.cs
+++ b/modules/back-end/src/Application/Users/CurrentUser.cs
@@ -12,12 +12,12 @@ public CurrentUser(IHttpContextAccessor httpContextAccessor)
         _httpContextAccessor = httpContextAccessor;
     }
 
-    public string Id
+    public Guid Id
     {
         get
         {
             var claim = _httpContextAccessor.HttpContext?.User.Claims.FirstOrDefault(x => x.Type == UserClaims.Id);
-            return claim == null ? string.Empty : claim.Value;
+            return claim == null ? Guid.Empty : Guid.Parse(claim.Value);
         }
     }
 }
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Users/GetProfile.cs b/modules/back-end/src/Application/Users/GetProfile.cs
new file mode 100644
index 000000000..350c21b24
--- /dev/null
+++ b/modules/back-end/src/Application/Users/GetProfile.cs
@@ -0,0 +1,23 @@
+namespace Application.Users;
+
+public class GetProfile : IRequest<Profile>
+{
+    public Guid Id { get; set; }
+}
+
+public class GetProfileHandler : IRequestHandler<GetProfile, Profile>
+{
+    private readonly IUserService _userService;
+
+    public GetProfileHandler(IUserService userService)
+    {
+        _userService = userService;
+    }
+
+    public async Task<Profile> Handle(GetProfile request, CancellationToken cancellationToken)
+    {
+        var user = await _userService.GetAsync(request.Id);
+
+        return new Profile(user);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Users/ICurrentUser.cs b/modules/back-end/src/Application/Users/ICurrentUser.cs
index cd3c562c4..5d44d2481 100644
--- a/modules/back-end/src/Application/Users/ICurrentUser.cs
+++ b/modules/back-end/src/Application/Users/ICurrentUser.cs
@@ -2,5 +2,5 @@ namespace Application.Users;
 
 public interface ICurrentUser
 {
-    string Id { get; }
+    Guid Id { get; }
 }
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Users/Profile.cs b/modules/back-end/src/Application/Users/Profile.cs
new file mode 100644
index 000000000..b78df7108
--- /dev/null
+++ b/modules/back-end/src/Application/Users/Profile.cs
@@ -0,0 +1,16 @@
+using Domain.Users;
+
+namespace Application.Users;
+
+public class Profile
+{
+    public Guid Id { get; set; }
+
+    public string Email { get; set; }
+
+    public Profile(User user)
+    {
+        Id = user.Id;
+        Email = user.Email;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Application/Usings.cs b/modules/back-end/src/Application/Usings.cs
index b09d91225..293a6a70b 100644
--- a/modules/back-end/src/Application/Usings.cs
+++ b/modules/back-end/src/Application/Usings.cs
@@ -2,3 +2,5 @@
 
 global using MediatR;
 global using FluentValidation;
+global using AutoMapper;
+global using Application.Services;
diff --git a/modules/back-end/src/Domain/Bases/AuditedEntity.cs b/modules/back-end/src/Domain/Bases/AuditedEntity.cs
new file mode 100644
index 000000000..6ff2b6e74
--- /dev/null
+++ b/modules/back-end/src/Domain/Bases/AuditedEntity.cs
@@ -0,0 +1,14 @@
+namespace Domain.Bases;
+
+public class AuditedEntity : Entity
+{
+    public DateTime CreatedAt { get; set; }
+
+    public DateTime UpdatedAt { get; set; }
+
+    public AuditedEntity()
+    {
+        CreatedAt = DateTime.UtcNow;
+        UpdatedAt = CreatedAt;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Bases/Entity.cs b/modules/back-end/src/Domain/Bases/Entity.cs
new file mode 100644
index 000000000..5c6028af9
--- /dev/null
+++ b/modules/back-end/src/Domain/Bases/Entity.cs
@@ -0,0 +1,6 @@
+namespace Domain.Bases;
+
+public class Entity
+{
+    public Guid Id { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Domain.csproj b/modules/back-end/src/Domain/Domain.csproj
index eb2460e91..0d16b46d7 100644
--- a/modules/back-end/src/Domain/Domain.csproj
+++ b/modules/back-end/src/Domain/Domain.csproj
@@ -3,7 +3,7 @@
     <PropertyGroup>
         <TargetFramework>net6.0</TargetFramework>
         <ImplicitUsings>enable</ImplicitUsings>
-        <Nullable>enable</Nullable>
+        <Nullable>disable</Nullable>
     </PropertyGroup>
 
 </Project>
diff --git a/modules/back-end/src/Domain/Environments/Environment.cs b/modules/back-end/src/Domain/Environments/Environment.cs
new file mode 100644
index 000000000..c1c78586e
--- /dev/null
+++ b/modules/back-end/src/Domain/Environments/Environment.cs
@@ -0,0 +1,12 @@
+namespace Domain.Environments;
+
+public class Environment : AuditedEntity
+{
+    public Guid ProjectId { get; set; }
+
+    public string Name { get; set; }
+
+    public string Description { get; set; }
+
+    public string Secret { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Groups/Group.cs b/modules/back-end/src/Domain/Groups/Group.cs
new file mode 100644
index 000000000..d3ec161f7
--- /dev/null
+++ b/modules/back-end/src/Domain/Groups/Group.cs
@@ -0,0 +1,10 @@
+namespace Domain.Groups;
+
+public class Group : AuditedEntity
+{
+    public Guid OrganizationId { get; set; }
+        
+    public string Name { get; set; }
+
+    public string Description { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Groups/GroupMember.cs b/modules/back-end/src/Domain/Groups/GroupMember.cs
new file mode 100644
index 000000000..29c2e3704
--- /dev/null
+++ b/modules/back-end/src/Domain/Groups/GroupMember.cs
@@ -0,0 +1,17 @@
+namespace Domain.Groups;
+
+public class GroupMember : AuditedEntity
+{
+    public Guid GroupId { get; set; }
+
+    public Guid OrganizationId { get; set; }
+
+    public Guid MemberId { get; set; }
+
+    public GroupMember(Guid groupId, Guid organizationId, Guid memberId)
+    {
+        GroupId = groupId;
+        OrganizationId = organizationId;
+        MemberId = memberId;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Groups/GroupPolicy.cs b/modules/back-end/src/Domain/Groups/GroupPolicy.cs
new file mode 100644
index 000000000..304383253
--- /dev/null
+++ b/modules/back-end/src/Domain/Groups/GroupPolicy.cs
@@ -0,0 +1,8 @@
+namespace Domain.Groups;
+
+public class GroupPolicy : AuditedEntity
+{
+    public Guid GroupId { get; set; }
+
+    public Guid PolicyId { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Members/Member.cs b/modules/back-end/src/Domain/Members/Member.cs
new file mode 100644
index 000000000..67073b493
--- /dev/null
+++ b/modules/back-end/src/Domain/Members/Member.cs
@@ -0,0 +1,14 @@
+namespace Domain.Members;
+
+public class Member
+{
+    public Guid Id { get; set; }
+
+    public string Email { get; set; }
+
+    public Guid? InvitorId { get; set; }
+
+    public string InitialPassword { get; set; }
+
+    public IEnumerable<MemberGroup> Groups { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Members/MemberGroup.cs b/modules/back-end/src/Domain/Members/MemberGroup.cs
new file mode 100644
index 000000000..0a3704420
--- /dev/null
+++ b/modules/back-end/src/Domain/Members/MemberGroup.cs
@@ -0,0 +1,14 @@
+namespace Domain.Members;
+
+public class MemberGroup
+{
+    public Guid Id { get; set; }
+
+    public string Name { get; set; }
+
+    public string Description { get; set; }
+
+    public Guid MemberId { get; set; }
+
+    public bool IsGroupMember { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Members/MemberPolicy.cs b/modules/back-end/src/Domain/Members/MemberPolicy.cs
new file mode 100644
index 000000000..50db27dca
--- /dev/null
+++ b/modules/back-end/src/Domain/Members/MemberPolicy.cs
@@ -0,0 +1,17 @@
+namespace Domain.Members;
+
+public class MemberPolicy : AuditedEntity
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid MemberId { get; set; }
+
+    public Guid PolicyId { get; set; }
+
+    public MemberPolicy(Guid organizationId, Guid memberId, Guid policyId)
+    {
+        OrganizationId = organizationId;
+        MemberId = memberId;
+        PolicyId = policyId;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Organizations/Organization.cs b/modules/back-end/src/Domain/Organizations/Organization.cs
new file mode 100644
index 000000000..4e7d13faa
--- /dev/null
+++ b/modules/back-end/src/Domain/Organizations/Organization.cs
@@ -0,0 +1,14 @@
+namespace Domain.Organizations;
+
+public class Organization : AuditedEntity
+{
+    public string Name { get; set; }
+
+    public bool Initialized { get; set; }
+
+    public Organization(string name)
+    {
+        Name = name;
+        Initialized = false;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Organizations/OrganizationUser.cs b/modules/back-end/src/Domain/Organizations/OrganizationUser.cs
new file mode 100644
index 000000000..2f3aec373
--- /dev/null
+++ b/modules/back-end/src/Domain/Organizations/OrganizationUser.cs
@@ -0,0 +1,24 @@
+namespace Domain.Organizations;
+
+public class OrganizationUser : AuditedEntity
+{
+    public Guid OrganizationId { get; set; }
+
+    public Guid UserId { get; set; }
+
+    public Guid? InvitorId { get; set; }
+
+    public string InitialPassword { get; set; }
+
+    public OrganizationUser(
+        Guid organizationId,
+        Guid userId,
+        Guid? invitorId = null,
+        string initialPassword = "")
+    {
+        OrganizationId = organizationId;
+        UserId = userId;
+        InvitorId = invitorId;
+        InitialPassword = initialPassword;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Policies/BuiltInPolicy.cs b/modules/back-end/src/Domain/Policies/BuiltInPolicy.cs
new file mode 100644
index 000000000..f88a7610b
--- /dev/null
+++ b/modules/back-end/src/Domain/Policies/BuiltInPolicy.cs
@@ -0,0 +1,11 @@
+namespace Domain.Policies;
+
+// taken from infra/mongodb/docker-entrypoint-initdb.d/seed.js
+public class BuiltInPolicy
+{
+    public static Guid Owner = Guid.Parse("98881f6a-5c6c-4277-bcf7-fda94c538785");
+
+    public static Guid Admin = Guid.Parse("3e961f0f-6fd4-4cf4-910f-52d356f8cc08");
+
+    public static Guid Developer = Guid.Parse("66f3687f-939d-4257-bd3f-c3553d39e1b6");
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Policies/Policy.cs b/modules/back-end/src/Domain/Policies/Policy.cs
new file mode 100644
index 000000000..29c3efd45
--- /dev/null
+++ b/modules/back-end/src/Domain/Policies/Policy.cs
@@ -0,0 +1,14 @@
+namespace Domain.Policies;
+
+public class Policy : AuditedEntity
+{
+    public Guid? OrganizationId { get; set; }
+
+    public string Name { get; set; }
+
+    public string Description { get; set; }
+
+    public string Type { get; set; }
+
+    public ICollection<PolicyStatement> Statements { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Policies/PolicyStatement.cs b/modules/back-end/src/Domain/Policies/PolicyStatement.cs
new file mode 100644
index 000000000..6bba851ce
--- /dev/null
+++ b/modules/back-end/src/Domain/Policies/PolicyStatement.cs
@@ -0,0 +1,14 @@
+namespace Domain.Policies;
+
+public class PolicyStatement
+{
+    public string Id { get; set; }
+
+    public string ResourceType { get; set; }
+
+    public string Effect { get; set; }
+
+    public ICollection<string> Actions { get; set; }
+
+    public ICollection<string> Resources { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Policies/PolicyTypes.cs b/modules/back-end/src/Domain/Policies/PolicyTypes.cs
new file mode 100644
index 000000000..29392a9e2
--- /dev/null
+++ b/modules/back-end/src/Domain/Policies/PolicyTypes.cs
@@ -0,0 +1,8 @@
+namespace Domain.Policies;
+
+public class PolicyTypes
+{
+    public const string CustomerManaged = "CustomerManaged";
+
+    public const string SysManaged = "SysManaged";
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Projects/Project.cs b/modules/back-end/src/Domain/Projects/Project.cs
new file mode 100644
index 000000000..d6fe6856b
--- /dev/null
+++ b/modules/back-end/src/Domain/Projects/Project.cs
@@ -0,0 +1,8 @@
+namespace Domain.Projects;
+
+public class Project : AuditedEntity
+{
+    public Guid OrganizationId { get; set; }
+
+    public string Name { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Projects/ProjectWithEnvs.cs b/modules/back-end/src/Domain/Projects/ProjectWithEnvs.cs
new file mode 100644
index 000000000..06946b42b
--- /dev/null
+++ b/modules/back-end/src/Domain/Projects/ProjectWithEnvs.cs
@@ -0,0 +1,12 @@
+using Environment = Domain.Environments.Environment;
+
+namespace Domain.Projects;
+
+public class ProjectWithEnvs
+{
+    public Guid Id { get; set; }
+
+    public string Name { get; set; }
+    
+    public IEnumerable<Environment> Environments { get; set; }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Domain/Users/User.cs b/modules/back-end/src/Domain/Users/User.cs
index e524b0661..fa89f3ecc 100644
--- a/modules/back-end/src/Domain/Users/User.cs
+++ b/modules/back-end/src/Domain/Users/User.cs
@@ -2,30 +2,37 @@
 
 namespace Domain.Users;
 
-public class User
+public class User : AuditedEntity
 {
-    public string Id { get; set; }
-
     public string Email { get; set; }
 
     public string Password { get; set; }
-    
-    public DateTime CreatedAt { get; set; }
 
-    public User(string id, string email, string password)
+    public User(Guid id, string email, string password)
     {
         Id = id;
+        
         Email = email;
         Password = password;
-        
+
+        CreatedAt = DateTime.UtcNow;
+        UpdatedAt = CreatedAt;
+    }
+
+    public User(string email, string password)
+    {
+        Email = email;
+        Password = password;
+
         CreatedAt = DateTime.UtcNow;
+        UpdatedAt = CreatedAt;
     }
 
     public IEnumerable<Claim> Claims()
     {
         var claims = new List<Claim>
         {
-            new(UserClaims.Id, Id),
+            new(UserClaims.Id, Id.ToString()),
             new(UserClaims.Email, Email)
         };
 
diff --git a/modules/back-end/src/Domain/Usings.cs b/modules/back-end/src/Domain/Usings.cs
new file mode 100644
index 000000000..4fd34a72b
--- /dev/null
+++ b/modules/back-end/src/Domain/Usings.cs
@@ -0,0 +1,3 @@
+// Global using directives
+
+global using Domain.Bases;
\ No newline at end of file
diff --git a/modules/back-end/src/Infrastructure/ConfigureServices.cs b/modules/back-end/src/Infrastructure/ConfigureServices.cs
index ecbc7a977..31549d26c 100644
--- a/modules/back-end/src/Infrastructure/ConfigureServices.cs
+++ b/modules/back-end/src/Infrastructure/ConfigureServices.cs
@@ -2,17 +2,21 @@
 using Application.Services;
 using Domain.Identity;
 using Domain.Users;
+using Infrastructure.Groups;
 using Infrastructure.Identity;
+using Infrastructure.Members;
 using Infrastructure.MongoDb;
+using Infrastructure.Organizations;
+using Infrastructure.Policies;
+using Infrastructure.Projects;
 using Infrastructure.Users;
 using Microsoft.AspNetCore.Identity;
 using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection.Extensions;
 using Microsoft.IdentityModel.Tokens;
-using MongoDB.Bson.Serialization.Conventions;
 
-// ReSharper disable once CheckNamespace
+// ReSharper disable CheckNamespace
 namespace Microsoft.Extensions.DependencyInjection;
+// ReSharper restore CheckNamespace
 
 public static class ConfigureServices
 {
@@ -21,18 +25,11 @@ public static IServiceCollection AddInfrastructureServices(
         IConfiguration configuration)
     {
         // mongodb
-        var conventions = new ConventionPack
-        {
-            new IgnoreExtraElementsConvention(true),
-            new CamelCaseElementNameConvention()
-        };
-        ConventionRegistry.Register("global-conventions", conventions, _ => true);
-
         services.Configure<MongoDbOptions>(configuration.GetSection(MongoDbOptions.MongoDb));
         services.AddSingleton<MongoDbClient>();
 
         // identity
-        services.TryAddScoped<IPasswordHasher<User>, PasswordHasher<User>>();
+        services.AddScoped<IPasswordHasher<User>, PasswordHasher<User>>();
         services.AddScoped<IUserStore, MongoDbUserStore>();
         services.AddScoped<IIdentityService, IdentityService>();
 
@@ -56,6 +53,14 @@ public static IServiceCollection AddInfrastructureServices(
                 };
             });
 
+        // custom services
+        services.AddScoped<IUserService, UserService>();
+        services.AddTransient<IOrganizationService, OrganizationService>();
+        services.AddTransient<IMemberService, MemberService>();
+        services.AddTransient<IProjectService, ProjectService>();
+        services.AddTransient<IGroupService, GroupService>();
+        services.AddTransient<IPolicyService, PolicyService>();
+
         return services;
     }
 }
\ No newline at end of file
diff --git a/modules/back-end/src/Infrastructure/Groups/GroupService.cs b/modules/back-end/src/Infrastructure/Groups/GroupService.cs
new file mode 100644
index 000000000..f1e9425f0
--- /dev/null
+++ b/modules/back-end/src/Infrastructure/Groups/GroupService.cs
@@ -0,0 +1,180 @@
+using Application.Bases.Exceptions;
+using Application.Bases.Models;
+using Application.Groups;
+using Application.Services;
+using Domain.Groups;
+using Domain.Organizations;
+using Domain.Policies;
+using Domain.Users;
+using Infrastructure.MongoDb;
+using MongoDB.Driver;
+using MongoDB.Driver.Linq;
+
+namespace Infrastructure.Groups;
+
+public class GroupService : IGroupService
+{
+    private readonly MongoDbClient _mongoDb;
+
+    public GroupService(MongoDbClient mongoDb)
+    {
+        _mongoDb = mongoDb;
+    }
+
+    public async Task<Group> GetAsync(Guid id)
+    {
+        var group = await _mongoDb.QueryableOf<Group>().FirstOrDefaultAsync(x => x.Id == id);
+        if (group == null)
+        {
+            throw new EntityNotFoundException(nameof(Group), id.ToString());
+        }
+
+        return group;
+    }
+
+    public async Task<PagedResult<Group>> GetListAsync(Guid organizationId, GroupFilter groupFilter)
+    {
+        var filterBuilder = Builders<Group>.Filter;
+
+        var filters = new List<FilterDefinition<Group>>
+        {
+            // accountId filter
+            filterBuilder.Eq(group => group.OrganizationId, organizationId)
+        };
+
+        // name filter
+        var name = groupFilter.Name;
+        if (!string.IsNullOrWhiteSpace(name))
+        {
+            var nameFilter = filterBuilder.Where(x => x.Name.Contains(name, StringComparison.CurrentCultureIgnoreCase));
+            filters.Add(nameFilter);
+        }
+
+        var collection = _mongoDb.CollectionOf<Group>();
+        var filter = filterBuilder.And(filters);
+
+        var totalCount = await collection.CountDocumentsAsync(filter);
+        var itemsQuery = collection
+            .Find(filter)
+            .Sort("{_id: -1}")
+            .Skip(groupFilter.PageIndex * groupFilter.PageSize)
+            .Limit(groupFilter.PageSize);
+
+        var items = await itemsQuery.ToListAsync();
+
+        return new PagedResult<Group>(totalCount, items);
+    }
+
+    public async Task<bool> IsNameUsedAsync(Guid organizationId, string name)
+    {
+        var isNameUsed =
+            await _mongoDb.QueryableOf<Group>().AnyAsync(x => x.OrganizationId == organizationId && x.Name == name);
+
+        return isNameUsed;
+    }
+
+    public async Task<PagedResult<GroupMemberVm>> GetMembersAsync(
+        Guid organizationId,
+        Guid groupId,
+        GroupMemberFilter filter)
+    {
+        var members = _mongoDb.QueryableOf<User>();
+        var organizationUsers = _mongoDb.QueryableOf<OrganizationUser>();
+        var groupMembers = _mongoDb.QueryableOf<GroupMember>();
+
+        var query =
+            from member in members
+            join organizationUser in organizationUsers
+                on member.Id equals organizationUser.UserId
+            join groupMember in groupMembers
+                on member.Id equals groupMember.MemberId
+                into allGroups
+            where organizationUser.OrganizationId == organizationId
+            select new
+            {
+                Id = member.Id,
+                member.Email,
+                Groups = allGroups,
+            };
+
+        if (!filter.GetAllMembers)
+        {
+            query = query.Where(x => x.Groups.Any(y => y.GroupId == groupId));
+        }
+
+        // email filter
+        var searchText = filter.SearchText;
+        if (!string.IsNullOrWhiteSpace(searchText))
+        {
+            query = query.Where(x => x.Email.Contains(searchText, StringComparison.CurrentCultureIgnoreCase));
+        }
+
+        var totalCount = await query.CountAsync();
+        var items = await query
+            .Skip(filter.PageIndex * filter.PageSize)
+            .Take(filter.PageSize)
+            .ToListAsync();
+
+        var vms = items.Select(x => new GroupMemberVm
+        {
+            Id = x.Id,
+            Email = x.Email,
+            IsGroupMember = x.Groups.Any(y => y.GroupId == groupId),
+        }).ToList();
+
+        return new PagedResult<GroupMemberVm>(totalCount, vms);
+    }
+
+    public async Task<PagedResult<GroupPolicyVm>> GetPoliciesAsync(
+        Guid organizationId, 
+        Guid groupId,
+        GroupPolicyFilter filter)
+    {
+        var policies = _mongoDb.QueryableOf<Policy>();
+        var groupPolicies = _mongoDb.QueryableOf<GroupPolicy>();
+
+        var query =
+            from policy in policies
+            join groupPolicy in groupPolicies
+                on policy.Id equals groupPolicy.PolicyId
+                into allPolicyGroups
+            where policy.OrganizationId == organizationId || policy.Type == PolicyTypes.SysManaged
+            select new
+            {
+                policy.Id,
+                policy.Name,
+                policy.Type,
+                policy.Description,
+                AllPolicyGroups = allPolicyGroups
+            };
+
+        if (!filter.GetAllPolicies)
+        {
+            query = query.Where(x => x.AllPolicyGroups.Any(y => y.GroupId == groupId));
+        }
+
+        // name filter
+        var name = filter.Name;
+        if (!string.IsNullOrWhiteSpace(name))
+        {
+            query = query.Where(x => x.Name.Contains(name, StringComparison.CurrentCultureIgnoreCase));
+        }
+
+        var totalCount = await query.CountAsync();
+        var items = await query
+            .Skip(filter.PageIndex * filter.PageSize)
+            .Take(filter.PageSize)
+            .ToListAsync();
+
+        var vms = items.Select(x => new GroupPolicyVm
+        {
+            Id = x.Id.ToString(),
+            Name = x.Name,
+            Type = x.Type,
+            Description = x.Description,
+            IsGroupPolicy = x.AllPolicyGroups.Any(y => y.GroupId == groupId)
+        }).ToList();
+
+        return new PagedResult<GroupPolicyVm>(totalCount, vms);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Infrastructure/Initialization.cs b/modules/back-end/src/Infrastructure/Initialization.cs
new file mode 100644
index 000000000..969036a8e
--- /dev/null
+++ b/modules/back-end/src/Infrastructure/Initialization.cs
@@ -0,0 +1,34 @@
+using System.Runtime.CompilerServices;
+using MongoDB.Bson;
+using MongoDB.Bson.Serialization;
+using MongoDB.Bson.Serialization.Conventions;
+using MongoDB.Bson.Serialization.IdGenerators;
+using MongoDB.Bson.Serialization.Serializers;
+
+namespace Infrastructure;
+
+public static class Initialization
+{
+#pragma warning disable CA2255
+    [ModuleInitializer]
+#pragma warning restore CA2255
+    public static void Run()
+    {
+        var conventions = new ConventionPack
+        {
+            new IgnoreExtraElementsConvention(true),
+            new CamelCaseElementNameConvention()
+        };
+        ConventionRegistry.Register("global-conventions", conventions, _ => true);
+
+        // guid handling
+#pragma warning disable 618
+        BsonDefaults.GuidRepresentationMode = GuidRepresentationMode.V3;
+#pragma warning restore
+        BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));
+        BsonSerializer.RegisterIdGenerator(
+            typeof(Guid),
+            CombGuidGenerator.Instance
+        );
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Infrastructure/Members/MemberService.cs b/modules/back-end/src/Infrastructure/Members/MemberService.cs
new file mode 100644
index 000000000..ee4662413
--- /dev/null
+++ b/modules/back-end/src/Infrastructure/Members/MemberService.cs
@@ -0,0 +1,306 @@
+using Application.Bases.Exceptions;
+using Application.Bases.Models;
+using Application.Members;
+using Application.Services;
+using Domain.Groups;
+using Domain.Members;
+using Domain.Organizations;
+using Domain.Policies;
+using Domain.Users;
+using Infrastructure.MongoDb;
+using MongoDB.Driver;
+using MongoDB.Driver.Linq;
+
+namespace Infrastructure.Members;
+
+public class MemberService : IMemberService
+{
+    private readonly MongoDbClient _mongoDb;
+
+    public MemberService(MongoDbClient mongoDb)
+    {
+        _mongoDb = mongoDb;
+    }
+
+    public async Task<Member> GetAsync(Guid organizationId, Guid memberId)
+    {
+        var users = _mongoDb.QueryableOf<User>();
+        var organizationUsers = _mongoDb.QueryableOf<OrganizationUser>();
+
+        var query =
+            from user in users
+            join organizationUser in organizationUsers
+                on user.Id equals organizationUser.UserId
+            where organizationUser.OrganizationId == organizationId && user.Id == memberId
+            select new Member
+            {
+                Id = user.Id,
+                Email = user.Email,
+                InvitorId = organizationUser.InvitorId,
+                InitialPassword = organizationUser.InitialPassword,
+            };
+
+        var member = await query.FirstOrDefaultAsync();
+        if (member == null)
+        {
+            throw new EntityNotFoundException(nameof(Member), $"{organizationId}-{memberId}");
+        }
+
+        // get member groups
+        member.Groups = await GetGroupsAsync(organizationId, new[] { member.Id });
+
+        return member;
+    }
+
+    public async Task<PagedResult<Member>> GetListAsync(Guid organizationId, MemberFilter filter)
+    {
+        var users = _mongoDb.QueryableOf<User>();
+        var organizationUsers = _mongoDb.QueryableOf<OrganizationUser>();
+
+        var query =
+            from user in users
+            join organizationUser in organizationUsers
+                on user.Id equals organizationUser.UserId
+            where organizationUser.OrganizationId == organizationId
+            select new Member
+            {
+                Id = user.Id,
+                Email = user.Email,
+                InvitorId = organizationUser.InvitorId,
+                InitialPassword = organizationUser.InitialPassword,
+            };
+
+        // email filter
+        var searchText = filter.SearchText;
+        if (!string.IsNullOrWhiteSpace(searchText))
+        {
+            query = query.Where(x => x.Email.Contains(searchText, StringComparison.CurrentCultureIgnoreCase));
+        }
+
+        var totalCount = await query.CountAsync();
+        var items = await query
+            .Skip(filter.PageIndex * filter.PageSize)
+            .Take(filter.PageSize)
+            .ToListAsync();
+
+        // get member groups
+        var memberIds = items.Select(x => x.Id);
+        var groups = await GetGroupsAsync(organizationId, memberIds);
+        foreach (var member in items)
+        {
+            member.Groups = groups.Where(x => x.MemberId == member.Id);
+        }
+
+        return new PagedResult<Member>(totalCount, items);
+    }
+
+    public async Task<List<MemberGroup>> GetGroupsAsync(Guid organizationId, IEnumerable<Guid> memberIds)
+    {
+        var groups = _mongoDb.QueryableOf<Group>();
+        var groupMembers = _mongoDb.QueryableOf<GroupMember>();
+
+        var query =
+            from theGroup in groups
+            join groupMember in groupMembers
+                on theGroup.Id equals groupMember.GroupId
+            where theGroup.OrganizationId == organizationId && memberIds.Contains(groupMember.MemberId)
+            select new MemberGroup
+            {
+                Id = theGroup.Id,
+                Name = theGroup.Name,
+                Description = theGroup.Description,
+                MemberId = groupMember.MemberId,
+                IsGroupMember = true
+            };
+
+        var items = await query.ToListAsync();
+        return items;
+    }
+
+    public async Task<PagedResult<MemberGroup>> GetGroupsAsync(
+        Guid organizationId,
+        Guid memberId,
+        MemberGroupFilter filter)
+    {
+        var groups = _mongoDb.QueryableOf<Group>();
+        var groupMembers = _mongoDb.QueryableOf<GroupMember>();
+
+        // aws document db not support '$let' operator which means we cannot operate on 'allGroupMembers' in the main query
+        var query =
+            from theGroup in groups
+            join groupMember in groupMembers
+                on theGroup.Id equals groupMember.GroupId
+                into allGroupMembers
+            where theGroup.OrganizationId == organizationId
+            select new
+            {
+                theGroup.Id,
+                theGroup.Name,
+                theGroup.Description,
+                GroupMembers = allGroupMembers
+            };
+
+        if (!filter.GetAllGroups)
+        {
+            query = query.Where(x => x.GroupMembers.Any(y => y.MemberId == memberId));
+        }
+
+        var name = filter.Name;
+        if (!string.IsNullOrWhiteSpace(name))
+        {
+            query = query.Where(x => x.Name.Contains(name, StringComparison.CurrentCultureIgnoreCase));
+        }
+
+        var totalCount = await query.CountAsync();
+        var items = await query
+            .Skip(filter.PageIndex * filter.PageSize)
+            .Take(filter.PageSize)
+            .ToListAsync();
+
+        var memberGroups = items.Select(x => new MemberGroup
+        {
+            Id = x.Id,
+            Name = x.Name,
+            Description = x.Description,
+            MemberId = memberId,
+            IsGroupMember = x.GroupMembers.Any(y => y.MemberId == memberId)
+        }).ToList();
+
+        return new PagedResult<MemberGroup>(totalCount, memberGroups);
+    }
+
+    public async Task<IEnumerable<Policy>> GetPoliciesAsync(Guid organizationId, Guid memberId)
+    {
+        // direct policies
+        var policies = _mongoDb.QueryableOf<Policy>();
+        var memberPolicies = _mongoDb.QueryableOf<MemberPolicy>();
+
+        var directPolicyQuery =
+            from policy in policies
+            join memberPolicy in memberPolicies
+                on policy.Id equals memberPolicy.PolicyId
+            where memberPolicy.OrganizationId == organizationId && memberPolicy.MemberId == memberId
+            select policy;
+
+        // inherited policies
+        var groups = _mongoDb.QueryableOf<Group>();
+        var groupMembers = _mongoDb.QueryableOf<GroupMember>();
+        var groupPolicies = _mongoDb.QueryableOf<GroupPolicy>();
+
+        var inheritedPolicyQuery =
+            from theGroup in groups
+            join groupMember in groupMembers
+                on theGroup.Id equals groupMember.GroupId
+            join groupPolicy in groupPolicies
+                on theGroup.Id equals groupPolicy.GroupId
+            join policy in policies
+                on groupPolicy.PolicyId equals policy.Id
+            where groupMember.OrganizationId == organizationId && groupMember.MemberId == memberId
+            select policy;
+        
+        var directPolicies = await directPolicyQuery.ToListAsync();
+        var inheritedPolicies = await inheritedPolicyQuery.ToListAsync();
+
+        // distinct by policy name
+        var allPolicies = directPolicies.Concat(inheritedPolicies).GroupBy(x => x.Name).Select(x => x.First());
+        return allPolicies;
+    }
+
+    public async Task<PagedResult<MemberPolicyVm>> GetDirectPoliciesAsync(
+        Guid organizationId,
+        Guid memberId,
+        MemberPolicyFilter filter)
+    {
+        var policies = _mongoDb.QueryableOf<Policy>();
+        var memberPolicies = _mongoDb.QueryableOf<MemberPolicy>();
+
+        var query =
+            from policy in policies
+            join memberPolicy in memberPolicies
+                on policy.Id equals memberPolicy.PolicyId
+                into allPolicyMembers
+            where policy.OrganizationId == organizationId || policy.Type == PolicyTypes.SysManaged
+            select new
+            {
+                policy.Id,
+                policy.Name,
+                policy.Type,
+                policy.Description,
+                AllPolicyMembers = allPolicyMembers
+            };
+
+        if (!filter.GetAllPolicies)
+        {
+            query = query.Where(
+                x => x.AllPolicyMembers.Any(y => y.OrganizationId == organizationId && y.MemberId == memberId)
+            );
+        }
+
+        // name filter
+        var name = filter.Name;
+        if (!string.IsNullOrWhiteSpace(name))
+        {
+            query = query.Where(x => x.Name.Contains(name, StringComparison.CurrentCultureIgnoreCase));
+        }
+
+        var totalCount = await query.CountAsync();
+        var items = await query
+            .Skip(filter.PageIndex * filter.PageSize)
+            .Take(filter.PageSize)
+            .ToListAsync();
+
+        var vms = items.Select(x => new MemberPolicyVm
+        {
+            Id = x.Id.ToString(),
+            Name = x.Name,
+            Type = x.Type,
+            Description = x.Description,
+            IsMemberPolicy = x.AllPolicyMembers.Any(y => y.OrganizationId == organizationId && y.MemberId == memberId)
+        }).ToList();
+
+        return new PagedResult<MemberPolicyVm>(totalCount, vms);
+    }
+
+    public async Task<PagedResult<InheritedMemberPolicy>> GetInheritedPoliciesAsync(
+        Guid organizationId,
+        Guid memberId,
+        InheritedMemberPolicyFilter filter)
+    {
+        var groups = _mongoDb.QueryableOf<Group>();
+        var groupMembers = _mongoDb.QueryableOf<GroupMember>();
+        var groupPolicies = _mongoDb.QueryableOf<GroupPolicy>();
+        var policies = _mongoDb.QueryableOf<Policy>();
+
+        var query =
+            from theGroup in groups
+            join groupMember in groupMembers
+                on theGroup.Id equals groupMember.GroupId
+            join groupPolicy in groupPolicies
+                on theGroup.Id equals groupPolicy.GroupId
+            join policy in policies
+                on groupPolicy.PolicyId equals policy.Id
+            where groupMember.OrganizationId == organizationId && groupMember.MemberId == memberId
+            select new InheritedMemberPolicy
+            {
+                Id = policy.Id,
+                Name = policy.Name,
+                Description = policy.Description,
+                Type = policy.Type,
+                GroupName = theGroup.Name
+            };
+
+        var name = filter.Name;
+        if (!string.IsNullOrWhiteSpace(name))
+        {
+            query = query.Where(x => x.Name.Contains(name, StringComparison.CurrentCultureIgnoreCase));
+        }
+
+        var totalCount = await query.CountAsync();
+        var items = await query
+            .Skip(filter.PageIndex * filter.PageSize)
+            .Take(filter.PageSize)
+            .ToListAsync();
+
+        return new PagedResult<InheritedMemberPolicy>(totalCount, items);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Infrastructure/MongoDb/MongoDbClient.cs b/modules/back-end/src/Infrastructure/MongoDb/MongoDbClient.cs
index 5d1d47192..c9125abeb 100644
--- a/modules/back-end/src/Infrastructure/MongoDb/MongoDbClient.cs
+++ b/modules/back-end/src/Infrastructure/MongoDb/MongoDbClient.cs
@@ -1,7 +1,17 @@
+using Domain.Groups;
+using Domain.Members;
+using Domain.Organizations;
+using Domain.Policies;
+using Domain.Projects;
 using Domain.Users;
 using Microsoft.Extensions.Options;
+using MongoDB.Bson;
+using MongoDB.Bson.Serialization;
+using MongoDB.Bson.Serialization.IdGenerators;
+using MongoDB.Bson.Serialization.Serializers;
 using MongoDB.Driver;
 using MongoDB.Driver.Linq;
+using Environment = Domain.Environments.Environment;
 
 namespace Infrastructure.MongoDb;
 
@@ -25,7 +35,18 @@ public MongoDbClient(IOptions<MongoDbOptions> options)
 
     private readonly Dictionary<Type, string> _collectionNameMap = new()
     {
-        { typeof(User), "Users" }
+        { typeof(User), "Users" },
+        
+        { typeof(Organization), "Organizations" },
+        { typeof(OrganizationUser), "OrganizationUsers" },
+        { typeof(Project), "Projects" },
+        { typeof(Environment), "Environments" },
+        
+        { typeof(Group), "Groups" },
+        { typeof(Policy), "Policies" },
+        { typeof(GroupMember), "GroupMembers" },
+        { typeof(GroupPolicy), "GroupPolicies" },
+        { typeof(MemberPolicy), "MemberPolicies" },
     };
 
     public IMongoCollection<TEntity> CollectionOf<TEntity>()
diff --git a/modules/back-end/src/Infrastructure/MongoDb/seed.js b/modules/back-end/src/Infrastructure/MongoDb/seed.js
deleted file mode 100644
index 2e556c01a..000000000
--- a/modules/back-end/src/Infrastructure/MongoDb/seed.js
+++ /dev/null
@@ -1,17 +0,0 @@
-print('use featbit database')
-db = db.getSiblingDB('featbit')
-
-print('start seed collections...')
-
-// seed user
-print('clean and seed collection: Users')
-db.Users.remove({})
-db.Users.insert(
-    {
-        _id: "a9013900-6c44-4aad-8e9a-568c2a429972",
-        email: "test@featbit.com",
-        password: "AQAAAAEAACcQAAAAELDHEjCrDQrmnAXU5C//mOLvUBJ7lnVFEMMFxNMDIIrF7xK8JDQKUifU3HH4gexNAQ==",
-        createAt: new Date()
-    }
-)
-print('collection seeded: Users')
\ No newline at end of file
diff --git a/modules/back-end/src/Infrastructure/Organizations/OrganizationService.cs b/modules/back-end/src/Infrastructure/Organizations/OrganizationService.cs
new file mode 100644
index 000000000..e1233d38d
--- /dev/null
+++ b/modules/back-end/src/Infrastructure/Organizations/OrganizationService.cs
@@ -0,0 +1,81 @@
+using Application.Services;
+using Domain.Groups;
+using Domain.Members;
+using Domain.Organizations;
+using Infrastructure.MongoDb;
+using MongoDB.Driver;
+using MongoDB.Driver.Linq;
+
+namespace Infrastructure.Organizations;
+
+public class OrganizationService : IOrganizationService
+{
+    private readonly MongoDbClient _mongoDb;
+
+    public OrganizationService(MongoDbClient mongoDb)
+    {
+        _mongoDb = mongoDb;
+    }
+
+    public async Task<Organization> GetAsync(Guid id)
+    {
+        return await _mongoDb.QueryableOf<Organization>().FirstOrDefaultAsync(x => x.Id == id);
+    }
+
+    public async Task<IEnumerable<Organization>> GetListAsync(Guid userId)
+    {
+        var organizations = _mongoDb.QueryableOf<Organization>();
+        var users = _mongoDb.QueryableOf<OrganizationUser>();
+
+        var query =
+            from organization in organizations
+            join user in users
+                on organization.Id equals user.OrganizationId
+            where user.UserId == userId
+            select organization;
+
+        return await query.ToListAsync();
+    }
+
+    public async Task<Organization> AddAsync(Organization organization)
+    {
+        await _mongoDb.CollectionOf<Organization>().InsertOneAsync(organization);
+
+        return organization;
+    }
+
+    public async Task<OrganizationUser> AddUserAsync(
+        OrganizationUser organizationUser,
+        ICollection<Guid>? policies,
+        ICollection<Guid>? groups)
+    {
+        // add organization user
+        await _mongoDb.CollectionOf<OrganizationUser>().InsertOneAsync(organizationUser);
+
+        // setup user policies and groups
+        var organizationId = organizationUser.OrganizationId;
+        var userId = organizationUser.UserId;
+
+        // add member policies
+        if (policies != null && policies.Any())
+        {
+            var memberPolicies = policies.Select(
+                policyId => new MemberPolicy(organizationId, userId, policyId)
+            );
+
+            await _mongoDb.CollectionOf<MemberPolicy>().InsertManyAsync(memberPolicies);
+        }
+
+        // add member to groups
+        if (groups != null && groups.Any())
+        {
+            var groupMembers = groups.Select(
+                groupId => new GroupMember(groupId, organizationId, userId)
+            ).ToList();
+
+            await _mongoDb.CollectionOf<GroupMember>().InsertManyAsync(groupMembers);
+        }
+
+        return organizationUser;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Infrastructure/Policies/PolicyService.cs b/modules/back-end/src/Infrastructure/Policies/PolicyService.cs
new file mode 100644
index 000000000..cfedc3b90
--- /dev/null
+++ b/modules/back-end/src/Infrastructure/Policies/PolicyService.cs
@@ -0,0 +1,172 @@
+using Application.Bases.Exceptions;
+using Application.Bases.Models;
+using Application.Policies;
+using Application.Services;
+using Domain.Groups;
+using Domain.Members;
+using Domain.Organizations;
+using Domain.Policies;
+using Domain.Users;
+using Infrastructure.MongoDb;
+using MongoDB.Driver;
+using MongoDB.Driver.Linq;
+
+namespace Infrastructure.Policies;
+
+public class PolicyService : IPolicyService
+{
+    private readonly MongoDbClient _mongoDb;
+
+    public PolicyService(MongoDbClient mongoDb)
+    {
+        _mongoDb = mongoDb;
+    }
+
+    public async Task<Policy> GetAsync(Guid id)
+    {
+        var policy = await _mongoDb.QueryableOf<Policy>().FirstOrDefaultAsync(x => x.Id == id);
+        if (policy == null)
+        {
+            throw new EntityNotFoundException(nameof(Policy), id.ToString());
+        }
+
+        return policy;
+    }
+
+    public async Task<PagedResult<Policy>> GetListAsync(Guid organizationId, PolicyFilter filter)
+    {
+        var query = _mongoDb.QueryableOf<Policy>()
+            .Where(x => x.OrganizationId == organizationId || x.Type == PolicyTypes.SysManaged);
+
+        var name = filter.Name;
+        if (!string.IsNullOrWhiteSpace(name))
+        {
+            query = query.Where(x => x.Name.Contains(name, StringComparison.CurrentCultureIgnoreCase));
+        }
+
+        var totalCount = await query.CountAsync();
+        var items = await query
+            .Skip(filter.PageIndex * filter.PageSize)
+            .OrderByDescending(x => x.CreatedAt)
+            .Take(filter.PageSize)
+            .ToListAsync();
+
+        return new PagedResult<Policy>(totalCount, items);
+    }
+
+    public async Task<bool> IsNameUsedAsync(Guid organizationId, string name)
+    {
+        var isNameUsed =
+            await _mongoDb.QueryableOf<Policy>().AnyAsync(x => x.OrganizationId == organizationId && x.Name == name);
+
+        return isNameUsed;
+    }
+
+    public async Task<PagedResult<PolicyGroup>> GetGroupsAsync(
+        Guid organizationId,
+        Guid policyId,
+        PolicyGroupFilter filter)
+    {
+        var groups = _mongoDb.QueryableOf<Group>();
+        var groupPolicies = _mongoDb.QueryableOf<GroupPolicy>();
+
+        var query =
+            from theGroup in groups
+            join groupPolicy in groupPolicies
+                on theGroup.Id equals groupPolicy.GroupId
+                into allGroupPolicies
+            where theGroup.OrganizationId == organizationId
+            select new
+            {
+                theGroup.Id,
+                theGroup.Name,
+                theGroup.Description,
+                AllGroupPolicies = allGroupPolicies
+            };
+
+        if (!filter.GetAllGroups)
+        {
+            query = query.Where(x => x.AllGroupPolicies.Any(y => y.PolicyId == policyId));
+        }
+
+        // name filter
+        var name = filter.Name;
+        if (!string.IsNullOrWhiteSpace(name))
+        {
+            query = query.Where(x => x.Name.Contains(name, StringComparison.CurrentCultureIgnoreCase));
+        }
+
+        var totalCount = await query.CountAsync();
+        var items = await query
+            .Skip(filter.PageIndex * filter.PageSize)
+            .Take(filter.PageSize)
+            .ToListAsync();
+
+        var vms = items.Select(x => new PolicyGroup
+        {
+            Id = x.Id,
+            Name = x.Name,
+            Description = x.Description,
+            IsPolicyGroup = x.AllGroupPolicies.Any(y => y.PolicyId == policyId)
+        }).ToList();
+
+        return new PagedResult<PolicyGroup>(totalCount, vms);
+    }
+
+    public async Task<PagedResult<PolicyMember>> GetMembersAsync(
+        Guid organizationId,
+        Guid policyId,
+        PolicyMemberFilter filter)
+    {
+        var users = _mongoDb.QueryableOf<User>();
+        var organizationUsers = _mongoDb.QueryableOf<OrganizationUser>();
+        var memberPolicies = _mongoDb.QueryableOf<MemberPolicy>();
+
+        var query =
+            from user in users
+            join organizationUser in organizationUsers
+                on user.Id equals organizationUser.UserId
+            join memberPolicy in memberPolicies
+                on user.Id equals memberPolicy.MemberId
+                into allMemberPolicies
+            where organizationUser.OrganizationId == organizationId
+            select new
+            {
+                user.Id,
+                user.Email,
+                AllMemberPolicies = allMemberPolicies,
+            };
+
+        if (!filter.GetAllMembers)
+        {
+            // because we have SysManaged policies that's **shared** between all organizations
+            // that means one policy can be used in many organizations, which means policyId:organizationId = 1:*
+            query = query.Where(
+                x => x.AllMemberPolicies.Any(y => y.OrganizationId == organizationId && y.PolicyId == policyId)
+            );
+        }
+
+        // email filter
+        var searchText = filter.SearchText;
+        if (!string.IsNullOrWhiteSpace(searchText))
+        {
+            query = query.Where(x => x.Email.Contains(searchText, StringComparison.CurrentCultureIgnoreCase));
+        }
+
+        var totalCount = await query.CountAsync();
+        var items = await query
+            .Skip(filter.PageIndex * filter.PageSize)
+            .Take(filter.PageSize)
+            .ToListAsync();
+
+        var vms = items.Select(x => new PolicyMember
+        {
+            Id = x.Id,
+            Email = x.Email,
+            IsPolicyMember =
+                x.AllMemberPolicies.Any(y => y.OrganizationId == organizationId && y.PolicyId == policyId),
+        }).ToList();
+
+        return new PagedResult<PolicyMember>(totalCount, vms);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Infrastructure/Projects/ProjectService.cs b/modules/back-end/src/Infrastructure/Projects/ProjectService.cs
new file mode 100644
index 000000000..228532f98
--- /dev/null
+++ b/modules/back-end/src/Infrastructure/Projects/ProjectService.cs
@@ -0,0 +1,58 @@
+using Application.Services;
+using Domain.Projects;
+using Infrastructure.MongoDb;
+using MongoDB.Driver;
+using Environment = Domain.Environments.Environment;
+using MongoDB.Driver.Linq;
+
+namespace Infrastructure.Projects;
+
+public class ProjectService : IProjectService
+{
+    private readonly MongoDbClient _mongoDb;
+
+    public ProjectService(MongoDbClient mongoDb)
+    {
+        _mongoDb = mongoDb;
+    }
+
+    public async Task<ProjectWithEnvs> GetAsync(Guid id)
+    {
+        var projects = _mongoDb.QueryableOf<Project>();
+        var envs = _mongoDb.QueryableOf<Environment>();
+
+        var query =
+            from project in projects
+            join env in envs
+                on project.Id equals env.ProjectId into allEnvs
+            where project.Id == id
+            select new ProjectWithEnvs
+            {
+                Id = project.Id,
+                Name = project.Name,
+                Environments = allEnvs
+            };
+
+        return await query.FirstOrDefaultAsync();
+    }
+
+    public async Task<IEnumerable<ProjectWithEnvs>> GetListAsync(Guid organizationId)
+    {
+        var projects = _mongoDb.QueryableOf<Project>();
+        var envs = _mongoDb.QueryableOf<Environment>();
+
+        var query =
+            from project in projects
+            join env in envs
+                on project.Id equals env.ProjectId into allEnvs
+            where project.OrganizationId == organizationId
+            select new ProjectWithEnvs
+            {
+                Id = project.Id,
+                Name = project.Name,
+                Environments = allEnvs
+            };
+
+        return await query.ToListAsync();
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/src/Infrastructure/Users/IUserStore.cs b/modules/back-end/src/Infrastructure/Users/IUserStore.cs
index 090cad82b..717696988 100644
--- a/modules/back-end/src/Infrastructure/Users/IUserStore.cs
+++ b/modules/back-end/src/Infrastructure/Users/IUserStore.cs
@@ -4,6 +4,8 @@ namespace Infrastructure.Users;
 
 public interface IUserStore
 {
+    Task<User?> FindByIdAsync(Guid id);
+
     Task<bool> UpdateAsync(User user);
 
     Task<User?> FindByEmailAsync(string email);
diff --git a/modules/back-end/src/Infrastructure/Users/MongoDbUserStore.cs b/modules/back-end/src/Infrastructure/Users/MongoDbUserStore.cs
index d06cb46c7..7b3598cde 100644
--- a/modules/back-end/src/Infrastructure/Users/MongoDbUserStore.cs
+++ b/modules/back-end/src/Infrastructure/Users/MongoDbUserStore.cs
@@ -14,6 +14,11 @@ public MongoDbUserStore(MongoDbClient mongo)
         _users = mongo.CollectionOf<User>();
     }
 
+    public async Task<User?> FindByIdAsync(Guid id)
+    {
+        return await _users.AsQueryable().FirstOrDefaultAsync(x => x.Id == id);
+    }
+
     public async Task<bool> UpdateAsync(User user)
     {
         var result = await _users.ReplaceOneAsync(x => x.Id == user.Id, user);
diff --git a/modules/back-end/src/Infrastructure/Users/UserService.cs b/modules/back-end/src/Infrastructure/Users/UserService.cs
new file mode 100644
index 000000000..44dc5eb98
--- /dev/null
+++ b/modules/back-end/src/Infrastructure/Users/UserService.cs
@@ -0,0 +1,26 @@
+using Application.Bases.Exceptions;
+using Application.Services;
+using Domain.Users;
+
+namespace Infrastructure.Users;
+
+public class UserService : IUserService
+{
+    private readonly IUserStore _users;
+
+    public UserService(IUserStore users)
+    {
+        _users = users;
+    }
+    
+    public async Task<User> GetAsync(Guid id)
+    {
+        var user = await _users.FindByIdAsync(id);
+        if (user == null)
+        {
+            throw new EntityNotFoundException(nameof(User), id.ToString());
+        }
+
+        return user;
+    }
+}
\ No newline at end of file
diff --git a/modules/front-end/angular.json b/modules/front-end/angular.json
index f7857a683..338cfe85d 100644
--- a/modules/front-end/angular.json
+++ b/modules/front-end/angular.json
@@ -143,5 +143,8 @@
         }
       }
     }
+  },
+  "cli": {
+    "analytics": false
   }
 }
diff --git a/modules/front-end/package-lock.json b/modules/front-end/package-lock.json
index 3dde43ceb..729ce16fa 100644
--- a/modules/front-end/package-lock.json
+++ b/modules/front-end/package-lock.json
@@ -32,6 +32,7 @@
         "@angular/localize": "^14.2.0",
         "@types/jasmine": "~4.0.0",
         "@types/karma-coverage": "^2.0.1",
+        "angular-locales-generator": "^1.0.0",
         "jasmine-core": "~4.3.0",
         "karma": "~6.4.0",
         "karma-chrome-launcher": "~3.1.0",
@@ -41,6 +42,30 @@
         "typescript": "~4.7.2"
       }
     },
+    "../../../../angular-locales-generator": {
+      "extraneous": true
+    },
+    "../../../angular-locales-generator": {
+      "version": "1.0.0",
+      "extraneous": true,
+      "license": "ISC",
+      "dependencies": {
+        "fast-xml-parser": "^4.0.10",
+        "winston": "^3.4.0",
+        "yargs": "^17.3.1"
+      },
+      "bin": {
+        "locales-generator": "build/cli.js"
+      },
+      "devDependencies": {
+        "@types/node": "^18.7.23",
+        "@types/yargs": "^17.0.13",
+        "gts": "^3.1.0",
+        "rimraf": "^3.0.2",
+        "ts-loader": "^9.4.1",
+        "typescript": "~4.7.2"
+      }
+    },
     "node_modules/@adobe/css-tools": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz",
@@ -2827,6 +2852,17 @@
         "node": ">=10"
       }
     },
+    "node_modules/@dabh/diagnostics": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
+      "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==",
+      "dev": true,
+      "dependencies": {
+        "colorspace": "1.1.x",
+        "enabled": "2.0.x",
+        "kuler": "^2.0.0"
+      }
+    },
     "node_modules/@discoveryjs/json-ext": {
       "version": "0.5.7",
       "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -3725,6 +3761,20 @@
         "ajv": "^8.8.2"
       }
     },
+    "node_modules/angular-locales-generator": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/angular-locales-generator/-/angular-locales-generator-1.0.0.tgz",
+      "integrity": "sha512-epTfltx6msepcpKAh1Hbp5wBtY9md8srda1v+b965MqlwIWY7X1fToaDDJPPf0fe+tuFQERqAveOuiA80mCQpg==",
+      "dev": true,
+      "dependencies": {
+        "fast-xml-parser": "^4.0.10",
+        "winston": "^3.4.0",
+        "yargs": "^17.3.1"
+      },
+      "bin": {
+        "locales-generator": "build/cli.js"
+      }
+    },
     "node_modules/ansi-colors": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
@@ -3829,6 +3879,12 @@
       "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
       "dev": true
     },
+    "node_modules/async": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
+      "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
+      "dev": true
+    },
     "node_modules/autoprefixer": {
       "version": "10.4.8",
       "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz",
@@ -4409,6 +4465,16 @@
         "node": ">=6"
       }
     },
+    "node_modules/color": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
+      "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+      "dev": true,
+      "dependencies": {
+        "color-convert": "^1.9.3",
+        "color-string": "^1.6.0"
+      }
+    },
     "node_modules/color-convert": {
       "version": "1.9.3",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -4424,6 +4490,16 @@
       "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
       "dev": true
     },
+    "node_modules/color-string": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+      "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+      "dev": true,
+      "dependencies": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
+      }
+    },
     "node_modules/color-support": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
@@ -4439,6 +4515,16 @@
       "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
       "dev": true
     },
+    "node_modules/colorspace": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
+      "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
+      "dev": true,
+      "dependencies": {
+        "color": "^3.1.3",
+        "text-hex": "1.0.x"
+      }
+    },
     "node_modules/commander": {
       "version": "2.20.3",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -5285,6 +5371,12 @@
         "node": ">= 4"
       }
     },
+    "node_modules/enabled": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
+      "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==",
+      "dev": true
+    },
     "node_modules/encodeurl": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
@@ -6096,6 +6188,22 @@
       "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
       "dev": true
     },
+    "node_modules/fast-xml-parser": {
+      "version": "4.0.10",
+      "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.10.tgz",
+      "integrity": "sha512-mYMMIk7Ho1QOiedyvafdyPamn1Vlda+5n95lcn0g79UiCQoLQ2xfPQ8m3pcxBMpVaftYXtoIE2wrNTjmLQnnkg==",
+      "dev": true,
+      "dependencies": {
+        "strnum": "^1.0.5"
+      },
+      "bin": {
+        "fxparser": "src/cli/cli.js"
+      },
+      "funding": {
+        "type": "paypal",
+        "url": "https://paypal.me/naturalintelligence"
+      }
+    },
     "node_modules/fastq": {
       "version": "1.13.0",
       "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
@@ -6240,6 +6348,12 @@
       "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
       "dev": true
     },
+    "node_modules/fn.name": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
+      "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==",
+      "dev": true
+    },
     "node_modules/follow-redirects": {
       "version": "1.15.1",
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
@@ -7693,6 +7807,12 @@
         "node": ">= 8"
       }
     },
+    "node_modules/kuler": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
+      "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==",
+      "dev": true
+    },
     "node_modules/less": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz",
@@ -7978,6 +8098,19 @@
         "node": ">=8.0"
       }
     },
+    "node_modules/logform": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz",
+      "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==",
+      "dev": true,
+      "dependencies": {
+        "@colors/colors": "1.5.0",
+        "fecha": "^4.2.0",
+        "ms": "^2.1.1",
+        "safe-stable-stringify": "^2.3.1",
+        "triple-beam": "^1.3.0"
+      }
+    },
     "node_modules/lru-cache": {
       "version": "7.14.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz",
@@ -8867,6 +9000,15 @@
         "wrappy": "1"
       }
     },
+    "node_modules/one-time": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
+      "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
+      "dev": true,
+      "dependencies": {
+        "fn.name": "1.x.x"
+      }
+    },
     "node_modules/onetime": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
@@ -10520,6 +10662,15 @@
       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
       "dev": true
     },
+    "node_modules/safe-stable-stringify": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.0.tgz",
+      "integrity": "sha512-eehKHKpab6E741ud7ZIMcXhKcP6TSIezPkNZhy5U8xC6+VvrRdUA2tMgxGxaGl4cz7c2Ew5+mg5+wNB16KQqrA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -10905,6 +11056,21 @@
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
       "dev": true
     },
+    "node_modules/simple-swizzle": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+      "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+      "dev": true,
+      "dependencies": {
+        "is-arrayish": "^0.3.1"
+      }
+    },
+    "node_modules/simple-swizzle/node_modules/is-arrayish": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+      "dev": true
+    },
     "node_modules/slash": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
@@ -11159,6 +11325,15 @@
         "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
       }
     },
+    "node_modules/stack-trace": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+      "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
+      "dev": true,
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/statuses": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
@@ -11246,6 +11421,12 @@
         "node": ">=6"
       }
     },
+    "node_modules/strnum": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
+      "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
+      "dev": true
+    },
     "node_modules/stylus": {
       "version": "0.59.0",
       "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz",
@@ -11548,6 +11729,12 @@
         "node": "*"
       }
     },
+    "node_modules/text-hex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
+      "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==",
+      "dev": true
+    },
     "node_modules/text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -11617,6 +11804,12 @@
         "tree-kill": "cli.js"
       }
     },
+    "node_modules/triple-beam": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
+      "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==",
+      "dev": true
+    },
     "node_modules/tslib": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
@@ -12217,6 +12410,42 @@
       "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
       "dev": true
     },
+    "node_modules/winston": {
+      "version": "3.8.2",
+      "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz",
+      "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==",
+      "dev": true,
+      "dependencies": {
+        "@colors/colors": "1.5.0",
+        "@dabh/diagnostics": "^2.0.2",
+        "async": "^3.2.3",
+        "is-stream": "^2.0.0",
+        "logform": "^2.4.0",
+        "one-time": "^1.0.0",
+        "readable-stream": "^3.4.0",
+        "safe-stable-stringify": "^2.3.1",
+        "stack-trace": "0.0.x",
+        "triple-beam": "^1.3.0",
+        "winston-transport": "^4.5.0"
+      },
+      "engines": {
+        "node": ">= 12.0.0"
+      }
+    },
+    "node_modules/winston-transport": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz",
+      "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==",
+      "dev": true,
+      "dependencies": {
+        "logform": "^2.3.2",
+        "readable-stream": "^3.6.0",
+        "triple-beam": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 6.4.0"
+      }
+    },
     "node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -14299,6 +14528,17 @@
       "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz",
       "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw=="
     },
+    "@dabh/diagnostics": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
+      "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==",
+      "dev": true,
+      "requires": {
+        "colorspace": "1.1.x",
+        "enabled": "2.0.x",
+        "kuler": "^2.0.0"
+      }
+    },
     "@discoveryjs/json-ext": {
       "version": "0.5.7",
       "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -15071,6 +15311,17 @@
         "fast-deep-equal": "^3.1.3"
       }
     },
+    "angular-locales-generator": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/angular-locales-generator/-/angular-locales-generator-1.0.0.tgz",
+      "integrity": "sha512-epTfltx6msepcpKAh1Hbp5wBtY9md8srda1v+b965MqlwIWY7X1fToaDDJPPf0fe+tuFQERqAveOuiA80mCQpg==",
+      "dev": true,
+      "requires": {
+        "fast-xml-parser": "^4.0.10",
+        "winston": "^3.4.0",
+        "yargs": "^17.3.1"
+      }
+    },
     "ansi-colors": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
@@ -15148,6 +15399,12 @@
       "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
       "dev": true
     },
+    "async": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
+      "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
+      "dev": true
+    },
     "autoprefixer": {
       "version": "10.4.8",
       "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz",
@@ -15564,6 +15821,16 @@
         "shallow-clone": "^3.0.0"
       }
     },
+    "color": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
+      "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.3",
+        "color-string": "^1.6.0"
+      }
+    },
     "color-convert": {
       "version": "1.9.3",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -15579,6 +15846,16 @@
       "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
       "dev": true
     },
+    "color-string": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+      "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+      "dev": true,
+      "requires": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
+      }
+    },
     "color-support": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
@@ -15591,6 +15868,16 @@
       "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
       "dev": true
     },
+    "colorspace": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
+      "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
+      "dev": true,
+      "requires": {
+        "color": "^3.1.3",
+        "text-hex": "1.0.x"
+      }
+    },
     "commander": {
       "version": "2.20.3",
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -16225,6 +16512,12 @@
       "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
       "dev": true
     },
+    "enabled": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
+      "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==",
+      "dev": true
+    },
     "encodeurl": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
@@ -16753,6 +17046,15 @@
       "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
       "dev": true
     },
+    "fast-xml-parser": {
+      "version": "4.0.10",
+      "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.10.tgz",
+      "integrity": "sha512-mYMMIk7Ho1QOiedyvafdyPamn1Vlda+5n95lcn0g79UiCQoLQ2xfPQ8m3pcxBMpVaftYXtoIE2wrNTjmLQnnkg==",
+      "dev": true,
+      "requires": {
+        "strnum": "^1.0.5"
+      }
+    },
     "fastq": {
       "version": "1.13.0",
       "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
@@ -16872,6 +17174,12 @@
       "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
       "dev": true
     },
+    "fn.name": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
+      "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==",
+      "dev": true
+    },
     "follow-redirects": {
       "version": "1.15.1",
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
@@ -17968,6 +18276,12 @@
       "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==",
       "dev": true
     },
+    "kuler": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
+      "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==",
+      "dev": true
+    },
     "less": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz",
@@ -18173,6 +18487,19 @@
         "streamroller": "^3.1.2"
       }
     },
+    "logform": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz",
+      "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==",
+      "dev": true,
+      "requires": {
+        "@colors/colors": "1.5.0",
+        "fecha": "^4.2.0",
+        "ms": "^2.1.1",
+        "safe-stable-stringify": "^2.3.1",
+        "triple-beam": "^1.3.0"
+      }
+    },
     "lru-cache": {
       "version": "7.14.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz",
@@ -18841,6 +19168,15 @@
         "wrappy": "1"
       }
     },
+    "one-time": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
+      "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
+      "dev": true,
+      "requires": {
+        "fn.name": "1.x.x"
+      }
+    },
     "onetime": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
@@ -19962,6 +20298,12 @@
       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
       "dev": true
     },
+    "safe-stable-stringify": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.0.tgz",
+      "integrity": "sha512-eehKHKpab6E741ud7ZIMcXhKcP6TSIezPkNZhy5U8xC6+VvrRdUA2tMgxGxaGl4cz7c2Ew5+mg5+wNB16KQqrA==",
+      "dev": true
+    },
     "safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -20262,6 +20604,23 @@
       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
       "dev": true
     },
+    "simple-swizzle": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+      "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.3.1"
+      },
+      "dependencies": {
+        "is-arrayish": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+          "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+          "dev": true
+        }
+      }
+    },
     "slash": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
@@ -20469,6 +20828,12 @@
         "minipass": "^3.1.1"
       }
     },
+    "stack-trace": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+      "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
+      "dev": true
+    },
     "statuses": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
@@ -20529,6 +20894,12 @@
       "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
       "dev": true
     },
+    "strnum": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
+      "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
+      "dev": true
+    },
     "stylus": {
       "version": "0.59.0",
       "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz",
@@ -20738,6 +21109,12 @@
         }
       }
     },
+    "text-hex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
+      "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==",
+      "dev": true
+    },
     "text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -20792,6 +21169,12 @@
       "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
       "dev": true
     },
+    "triple-beam": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
+      "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==",
+      "dev": true
+    },
     "tslib": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
@@ -21206,6 +21589,36 @@
       "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
       "dev": true
     },
+    "winston": {
+      "version": "3.8.2",
+      "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz",
+      "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==",
+      "dev": true,
+      "requires": {
+        "@colors/colors": "1.5.0",
+        "@dabh/diagnostics": "^2.0.2",
+        "async": "^3.2.3",
+        "is-stream": "^2.0.0",
+        "logform": "^2.4.0",
+        "one-time": "^1.0.0",
+        "readable-stream": "^3.4.0",
+        "safe-stable-stringify": "^2.3.1",
+        "stack-trace": "0.0.x",
+        "triple-beam": "^1.3.0",
+        "winston-transport": "^4.5.0"
+      }
+    },
+    "winston-transport": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz",
+      "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==",
+      "dev": true,
+      "requires": {
+        "logform": "^2.3.2",
+        "readable-stream": "^3.6.0",
+        "triple-beam": "^1.3.0"
+      }
+    },
     "wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
diff --git a/modules/front-end/package.json b/modules/front-end/package.json
index 187ad1242..290cde164 100644
--- a/modules/front-end/package.json
+++ b/modules/front-end/package.json
@@ -7,7 +7,7 @@
     "start:zh": "ng serve --configuration=development,zh --port=4201",
     "build:dev": "ng build --localize --configuration development",
     "build:prod": "ng build --localize --configuration production",
-    "i18n": "ng extract-i18n --output-path src/locale",
+    "i18n": "ng extract-i18n --output-path src/locale && locales-generator --l zh --bp ./src/locale",
     "test": "ng test",
     "test-coverage": "ng test --code-coverage"
   },
@@ -36,6 +36,7 @@
     "@angular/localize": "^14.2.0",
     "@types/jasmine": "~4.0.0",
     "@types/karma-coverage": "^2.0.1",
+    "angular-locales-generator": "^1.0.0",
     "jasmine-core": "~4.3.0",
     "karma": "~6.4.0",
     "karma-chrome-launcher": "~3.1.0",
diff --git a/modules/front-end/src/app/app-routing.module.ts b/modules/front-end/src/app/app-routing.module.ts
index 7c2de0482..f9f757c75 100644
--- a/modules/front-end/src/app/app-routing.module.ts
+++ b/modules/front-end/src/app/app-routing.module.ts
@@ -10,6 +10,11 @@ const routes: Routes = [
     canActivate: [LoginGuard],
     loadChildren: () => import("./features/login/login.module").then(m => m.LoginModule)
   },
+  {
+    path: 'onboarding',
+    canActivate: [AuthGuard],
+    loadChildren: () => import("./features/safe/onboarding/onboarding.module").then(m => m.OnboardingModule),
+  },
   {
     path: '',
     canActivate: [AuthGuard],
diff --git a/modules/front-end/src/app/app.module.ts b/modules/front-end/src/app/app.module.ts
index 000bb2e2b..868a238d1 100644
--- a/modules/front-end/src/app/app.module.ts
+++ b/modules/front-end/src/app/app.module.ts
@@ -4,7 +4,7 @@ import { BrowserModule } from '@angular/platform-browser';
 import { AppRoutingModule } from './app-routing.module';
 import { AppComponent } from './app.component';
 import { HTTP_INTERCEPTORS, HttpClientModule } from "@angular/common/http";
-import { TokenInterceptor } from "@interceptors/token.interceptor";
+import { RequestResponseInterceptor } from "@interceptors/request-response.interceptor";
 import { NZ_I18N, zh_CN, en_US } from "ng-zorro-antd/i18n";
 import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
 import { IconsProviderModule } from "./icons-provider.module";
@@ -46,7 +46,7 @@ import {AccountProjectEnvResolver} from "@services/account-preject-env-resolver.
       },
       deps: [LOCALE_ID]
     },
-    { provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true },
+    { provide: HTTP_INTERCEPTORS, useClass: RequestResponseInterceptor, multi: true },
   ],
   bootstrap: [AppComponent]
 })
diff --git a/modules/front-end/src/app/core/components/env-drawer/env-drawer.component.html b/modules/front-end/src/app/core/components/env-drawer/env-drawer.component.html
index c0de2234c..0ceb804b8 100644
--- a/modules/front-end/src/app/core/components/env-drawer/env-drawer.component.html
+++ b/modules/front-end/src/app/core/components/env-drawer/env-drawer.component.html
@@ -19,9 +19,9 @@
 
     <form nz-form [formGroup]="envForm" (ngSubmit)="doSubmit()" nzLayout="vertical">
       <nz-form-item>
-        <nz-form-label nzRequired i18n="@@org.project.envName">Environment name</nz-form-label>
+        <nz-form-label nzRequired i18n="@@common.name">Name</nz-form-label>
         <nz-form-control nzErrorTip="Environment name is mandatory!" i18n-nzErrorTip="@@org.project.envNameMandatory">
-          <input type="text" nz-input formControlName="name" placeholder="Environment name" i18n-placeholder="@@org.project.envNamePlaceholder"/>
+          <input type="text" nz-input formControlName="name" placeholder="Name" i18n-placeholder="@@common.name"/>
         </nz-form-control>
       </nz-form-item>
       <nz-form-item>
diff --git a/modules/front-end/src/app/core/components/find-rule/rule/rule.component.html b/modules/front-end/src/app/core/components/find-rule/rule/rule.component.html
index 17fe6b27e..eeccbd1e0 100644
--- a/modules/front-end/src/app/core/components/find-rule/rule/rule.component.html
+++ b/modules/front-end/src/app/core/components/find-rule/rule/rule.component.html
@@ -1,16 +1,18 @@
 <section class="rule-item">
-  <div class="tip" *ngIf="isFirst; else andTemplate;">如果</div>
+  <div class="tip" *ngIf="isFirst; else andTemplate;" i18n="@@core.components.findrule.if">If</div>
   <ng-template #andTemplate>
-    <div class="tip">并且</div>
+    <div class="tip" i18n="@@core.components.findrule.and">and</div>
   </ng-template>
   <div class="select">
-    <nz-select nzShowSearch nzPlaceHolder="选择用户属性" [(ngModel)]="ruleContent.property" (ngModelChange)="onPropertyChange()">
+    <nz-select nzShowSearch nzPlaceHolder="Select property" i18n-nzPlaceHolder="@@core.components.findrule.rule.selectuserproperty"
+               [(ngModel)]="ruleContent.property" (ngModelChange)="onPropertyChange()">
       <nz-option *ngFor="let userProp of userProps" [nzValue]="userProp.name" [nzLabel]="userProp.name"></nz-option>
     </nz-select>
   </div>
   <div class="select" *ngIf="!isSegmentRule">
     <nz-select
-      nzPlaceHolder="选择条件"
+      nzPlaceHolder="condition"
+      i18n-nzPlaceHolder="@@core.components.findrule.rule.selectcondition"
       nzShowSearch
       [(ngModel)]="ruleContent.operation"
       (ngModelChange)="onOperationChange()">
@@ -19,7 +21,10 @@
   </div>
   <ng-container [ngSwitch]="ruleContent.type" *ngIf="!isSegmentRule">
     <ng-template #presetSelect>
-      <nz-select style="min-width: 200px" nzShowSearch nzPlaceHolder="请选择备选值" [(ngModel)]="ruleContent.value" (ngModelChange)="onDebounceTimeModelChange()">
+      <nz-select style="min-width: 200px" nzShowSearch 
+                nzPlaceHolder="values" 
+                i18n-nzPlaceHolder="@@core.components.findrule.rule.selectvalues"
+                [(ngModel)]="ruleContent.value" (ngModelChange)="onDebounceTimeModelChange()">
         <nz-option
           *ngFor="let presetValue of currentUserProp.presetValues"
           [nzLabel]="presetValue.description"
@@ -29,12 +34,16 @@
     </ng-template>
     <ng-container *ngSwitchCase="'string'">
       <div class="value" *ngIf="!currentUserProp.usePresetValuesOnly; else presetSelect">
-        <input class="standard-bordered-input" nz-input [(ngModel)]="ruleContent.value"  (ngModelChange)="onDebounceTimeModelChange()" placeholder="请输入"/>
+        <input class="standard-bordered-input" nz-input [(ngModel)]="ruleContent.value"  (ngModelChange)="onDebounceTimeModelChange()" 
+               placeholder="input string or number"
+               i18n-placeholder="@@core.components.findrule.rule.pleaseinput" />
       </div>
     </ng-container>
     <ng-container *ngSwitchCase="'number'">
       <div class="value" *ngIf="!currentUserProp.usePresetValuesOnly; else presetSelect">
-        <input class="standard-bordered-input" nz-input type="number" [(ngModel)]="ruleContent.value"  (ngModelChange)="onDebounceTimeModelChange()" placeholder="请输入数字"/>
+        <input class="standard-bordered-input" nz-input type="number" [(ngModel)]="ruleContent.value"  (ngModelChange)="onDebounceTimeModelChange()" 
+               placeholder="input a number"
+               i18n-placeholder="@@core.components.findrule.rule.inputnumber"/>
       </div>
     </ng-container>
     <ng-container *ngSwitchCase="'regex'">
@@ -47,7 +56,8 @@
         <div class="multi-select">
           <nz-select style="min-width: 200px"
             [nzMode]="multiSelectMode"
-            nzPlaceHolder="请输入备选值"
+            nzPlaceHolder="values"
+            i18n-nzPlaceHolder="@@core.components.findrule.rule.selectvalues"
             nzShowSearch
             [(ngModel)]="ruleContent.multipleValue"
             [nzMaxTagPlaceholder]="omittedPlaceHolder"
@@ -66,7 +76,8 @@
   <ng-container *ngIf="isSegmentRule">
     <nz-select class="multi-select" style="min-width: 200px;"
       nzMode="multiple"
-      nzPlaceHolder="请选择用户组"
+      nzPlaceHolder="segments"
+      i18n-nzPlaceHolder="@@core.components.findrule.rule.segments"
       nzAllowClear
       nzShowSearch
       nzServerSearch
@@ -92,9 +103,11 @@
   </ng-container>
   <ng-template #omittedPlaceHolder>
     <div class="ant-select-selection-item-content"
-         nz-popover="所有选项" [nzPopoverContent]="allSelectedItems" nzPopoverOverlayClassName="selected-items-popover">
+         nz-popover="total options" 
+         i18n-nz-popover="@@core.components.findrule.rule.alloptions"
+         [nzPopoverContent]="allSelectedItems" nzPopoverOverlayClassName="selected-items-popover">
     <span class="more-select-selection-item">
-      等共 {{ ruleContent.multipleValue.length }} 项
+      {{ ruleContent.multipleValue.length }}
       <i nz-icon nzType="expand"></i>
     </span>
       <ng-template #allSelectedItems>
diff --git a/modules/front-end/src/app/core/components/find-rule/ruleConfig.ts b/modules/front-end/src/app/core/components/find-rule/ruleConfig.ts
index f35341040..ea7d387d0 100644
--- a/modules/front-end/src/app/core/components/find-rule/ruleConfig.ts
+++ b/modules/front-end/src/app/core/components/find-rule/ruleConfig.ts
@@ -23,81 +23,81 @@ export const ruleKeyConfig: ruleType[] = [
 
 export const ruleValueConfig: ruleType[] = [
     {
-        label: '为真',
+        label: $localize `:@@core.components.findrule.operators.istrue:is true`,
         value: 'IsTrue',
         type: '',
         default: 'IsTrue'
     },{
-        label: '为假',
+        label: $localize `:@@core.components.findrule.operators.isfalse:is false`,
         value: 'IsFalse',
         type: '',
         default: 'IsFalse'
     },{
-        label: '等于',
+        label: $localize `:@@core.components.findrule.operators.equals:equals`,
         value: 'Equal',
         type: 'string'
     },{
-        label: '不等于',
+        label: $localize `:@@core.components.findrule.operators.notequal:not equal`,
         value: 'NotEqual',
         type: 'string',
         default: ''
     },{
-        label: '小于',
+        label: $localize `:@@core.components.findrule.operators.lessthan:less than`,
         value: 'LessThan',
         type: 'number',
         default: ''
     },{
-        label: '大于',
+        label: $localize `:@@core.components.findrule.operators.biggerthan:bigger than`,
         value: 'BiggerThan',
         type: 'number',
         default: ''
     },{
-        label: '小于等于',
+        label: $localize `:@@core.components.findrule.operators.lessequalthan:less equal than`,
         value: 'LessEqualThan',
         type: 'number',
         default: ''
     },{
-        label: '大于等于',
+        label: $localize `:@@core.components.findrule.operators.biggerequalthan:bigger equal than`,
         value: 'BiggerEqualThan',
         type: 'number',
         default: ''
     },{
-        label: '属于',
+        label: $localize `:@@core.components.findrule.operators.isoneof:is one of`,
         value: 'IsOneOf',
         type: 'multi',
         default: ''
     },{
-        label: '不属于',
+        label: $localize `:@@core.components.findrule.operators.notoneof:not one of`,
         value: 'NotOneOf',
         type: 'multi',
         default: ''
     },{
-        label: '包含',
+        label: $localize `:@@core.components.findrule.operators.contains:contains`,
         value: 'Contains',
         type: 'string',
         default: ''
     },{
-        label: '不包含',
+        label: $localize `:@@core.components.findrule.operators.notcontain:not contain`,
         value: 'NotContain',
         type: 'string',
         default: ''
     },{
-        label: '以指定字符串开头',
+        label: $localize `:@@core.components.findrule.operators.startwith:start with`,
         value: 'StartsWith',
         type: 'string',
         default: ''
     },{
-        label: '以指定字符串结尾',
+        label: $localize `:@@core.components.findrule.operators.endswith:ends with`,
         value: 'EndsWith',
         type: 'string',
         default: ''
     },{
-      label: '正则匹配',
+      label: $localize `:@@core.components.findrule.operators.matchregex:match regex`,
       value: 'MatchRegex',
       type: 'regex',
       default: ''
     },{
-      label: '正则不匹配',
+      label: $localize `:@@core.components.findrule.operators.notmatchregex:not match regex`,
       value: 'NotMatchRegex',
       type: 'regex',
       default: ''
diff --git a/modules/front-end/src/app/core/components/find-rule/serve-multistates/serve-multistates.component.html b/modules/front-end/src/app/core/components/find-rule/serve-multistates/serve-multistates.component.html
index e6a2627fc..bee61728c 100644
--- a/modules/front-end/src/app/core/components/find-rule/serve-multistates/serve-multistates.component.html
+++ b/modules/front-end/src/app/core/components/find-rule/serve-multistates/serve-multistates.component.html
@@ -1,12 +1,15 @@
 <section class="rule-item">
   <div *ngIf="!serveSingleOption" class="rule-serve" [class.single-select]="serveSingleOption">
-    <div class="tip">返回</div>
+    <div class="tip" i18n="@@core.components.findrule.serve">serve</div>
     <div class="select">
-      <nz-select [(ngModel)]="selectedValueOptionId" (ngModelChange)="modelChange()" nzPlaceHolder="选择返回值">
+      <nz-select [(ngModel)]="selectedValueOptionId" (ngModelChange)="modelChange()" 
+                 nzPlaceHolder="variation"  i18n-nzPlaceHolder="@@app.components.findrule.selectvariation">
         <nz-option *ngFor="let variationOption of availableVariationOptions; let i = index" nzCustomContent [nzValue]="variationOption.localId" [nzLabel]="variationOption.variationValue">
             {{variationOption.variationValue}}
         </nz-option>
-        <nz-option *ngIf="availableVariationOptions.length > 1" [nzValue]="-1" [nzLabel]="'百分比匹配'"></nz-option>
+        <nz-option *ngIf="availableVariationOptions.length > 1" [nzValue]="-1" 
+                   nzLabel="Rollout percentage"
+                   i18n-nzLabel="@@app.components.findrule.rolloutpercentage"></nz-option>
       </nz-select>
     </div>
     <div class="percentage-body" *ngIf="selectedValueOptionId === -1">
diff --git a/modules/front-end/src/app/core/components/header/header.component.html b/modules/front-end/src/app/core/components/header/header.component.html
index 021cea4bb..e81568084 100644
--- a/modules/front-end/src/app/core/components/header/header.component.html
+++ b/modules/front-end/src/app/core/components/header/header.component.html
@@ -12,7 +12,7 @@
       <div class="org-proj-env">
       <span [routerLink]="['/account-settings']">
         <i nz-icon nzType="icons:icon-org"></i>
-        {{currentAccount?.organizationName}}
+        {{currentAccount?.name}}
       </span>
         <span (click)="envModalVisible=true">
         <i nz-icon nzType="icons:icon-proj"></i>
diff --git a/modules/front-end/src/app/core/components/header/header.component.ts b/modules/front-end/src/app/core/components/header/header.component.ts
index d46641b49..d5733699c 100644
--- a/modules/front-end/src/app/core/components/header/header.component.ts
+++ b/modules/front-end/src/app/core/components/header/header.component.ts
@@ -1,6 +1,6 @@
 import { Component, Input, OnInit } from '@angular/core';
-import { IAuthProps, IAccount, IProject, IEnvironment, IProjectEnv } from '@shared/types';
-import { AccountService } from '@services/account.service';
+import { IAuthProps, IOrganization, IProject, IEnvironment, IProjectEnv } from '@shared/types';
+import { OrganizationService } from '@services/organization.service';
 import { ProjectService } from '@services/project.service';
 import { Router } from '@angular/router';
 import { Breadcrumb, BreadcrumbService } from '@services/bread-crumb.service';
@@ -20,7 +20,7 @@ export class HeaderComponent implements OnInit {
   cannotReadProjectsMsg: string;
   cannotReadEnvsMsg: string;
   currentProjectEnv: IProjectEnv;
-  currentAccount: IAccount;
+  currentAccount: IOrganization;
 
   allProjects: IProject[];
   selectedProject: IProject;
@@ -33,7 +33,7 @@ export class HeaderComponent implements OnInit {
   flags = {};
   constructor(
     private router: Router,
-    private accountService: AccountService,
+    private accountService: OrganizationService,
     private projectService: ProjectService,
     private message: NzMessageService,
     private readonly breadcrumbService: BreadcrumbService,
@@ -119,9 +119,9 @@ export class HeaderComponent implements OnInit {
   }
 
   private selectCurrentProjectEnv() {
-    const currentAccountProjectEnv = this.accountService.getCurrentAccountProjectEnv();
+    const currentAccountProjectEnv = this.accountService.getCurrentOrganizationProjectEnv();
 
-    this.currentAccount = currentAccountProjectEnv.account;
+    this.currentAccount = currentAccountProjectEnv.organization;
     this.currentProjectEnv = currentAccountProjectEnv.projectEnv;
 
     this.selectedProject = {
diff --git a/modules/front-end/src/app/core/components/member-drawer/member-drawer.component.html b/modules/front-end/src/app/core/components/member-drawer/member-drawer.component.html
index 71fe4aaaf..f805474e8 100644
--- a/modules/front-end/src/app/core/components/member-drawer/member-drawer.component.html
+++ b/modules/front-end/src/app/core/components/member-drawer/member-drawer.component.html
@@ -9,37 +9,19 @@
   (nzOnClose)="onClose()">
   <ng-container *nzDrawerContent>
     <form nz-form [formGroup]="memberForm" (ngSubmit)="doSubmit()" nzLayout="vertical">
-      <nz-form-item>
-        <nz-form-label nzRequired i18n="@@iam.team.member-drawer.invitation-mode">Invitation mode</nz-form-label>
-        <nz-form-control>
-          <nz-radio-group formControlName="identityType" (ngModelChange)="onIdentityTypeChange($event)">
-            <label nz-radio nzValue="phoneNumber" i18n="@@iam.team.member-drawer.mobile">Mobile</label>
-            <label nz-radio nzValue="email" i18n="@@iam.team.member-drawer.email">Email</label>
-          </nz-radio-group>
-        </nz-form-control>
-      </nz-form-item>
-
-      <!-- phoneNumber -->
-      <nz-form-item *ngIf="memberForm.get('identityType').value === 'phoneNumber'">
-        <nz-form-label nzRequired i18n="@@iam.team.member-drawer.mobile">Mobile</nz-form-label>
-        <nz-form-control nzErrorTip="Invalid mobile number" i18n-nzErrorTip="@@iam.team.member-drawer.invalid-mobile">
-          <input type="text" nz-input formControlName="identity" placeholder="Mobile number" i18n-placeholder="@@iam.team.member-drawer.mobile-placeholder"/>
-        </nz-form-control>
-      </nz-form-item>
-
       <!-- email -->
-      <nz-form-item *ngIf="memberForm.get('identityType').value === 'email'">
+      <nz-form-item>
         <nz-form-label nzRequired i18n="@@iam.team.member-drawer.email">Email</nz-form-label>
         <nz-form-control nzErrorTip="Invalid Email" i18n-nzErrorTip="@@iam.team.member-drawer.invalid-email">
-          <input type="text" nz-input formControlName="identity" placeholder="Email" i18n-placeholder="@@iam.team.member-drawer.email-placeholder"/>
+          <input type="text" nz-input formControlName="email" placeholder="Email" i18n-placeholder="@@iam.team.member-drawer.email-placeholder"/>
         </nz-form-control>
       </nz-form-item>
 
       <!-- name -->
       <nz-form-item>
-        <nz-form-label i18n="@@iam.team.member-drawer.name">Name</nz-form-label>
+        <nz-form-label i18n="@@common.name">Name</nz-form-label>
         <nz-form-control>
-          <input type="text" nz-input formControlName="name" placeholder="Name" i18n-placeholder="@@iam.team.member-drawer.name-placeholder"/>
+          <input type="text" nz-input formControlName="name" placeholder="Name" i18n-placeholder="@@common.name"/>
         </nz-form-control>
       </nz-form-item>
 
@@ -56,7 +38,7 @@
               formControlName="policyId">
               <ng-container *ngFor="let policy of policies.items">
                 <nz-option nzCustomContent *ngIf="!isPoliciesLoading" [nzLabel]="policy.name" [nzValue]="policy.id">
-                  <i *ngIf="policy.type === 'FFCManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
+                  <i *ngIf="policy.type === 'SysManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
                   {{ policy.name }}
                 </nz-option>
               </ng-container>
diff --git a/modules/front-end/src/app/core/components/member-drawer/member-drawer.component.ts b/modules/front-end/src/app/core/components/member-drawer/member-drawer.component.ts
index a8d298bde..05edb7cd1 100644
--- a/modules/front-end/src/app/core/components/member-drawer/member-drawer.component.ts
+++ b/modules/front-end/src/app/core/components/member-drawer/member-drawer.component.ts
@@ -1,7 +1,7 @@
 import { Component, Input, Output, EventEmitter } from '@angular/core';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
 import { NzMessageService } from 'ng-zorro-antd/message';
-import { phoneNumberValidator } from "@utils/form-validators";
+import { phoneNumberOrEmailValidator } from "@utils/form-validators";
 import { MemberService } from "@services/member.service";
 import { PolicyService } from "@services/policy.service";
 import { IPagedPolicy, PolicyFilter } from "@features/safe/iam/types/policy";
@@ -46,8 +46,7 @@ export class MemberDrawerComponent {
     this.getGroups();
 
     this.memberForm = this.fb.group({
-      identityType: ['phoneNumber', [Validators.required]],
-      identity: ['', [phoneNumberValidator, Validators.required]],
+      email: ['', [phoneNumberOrEmailValidator, Validators.required]],
       policyId: [''],
       groupId: [''],
       name: ''
@@ -74,23 +73,8 @@ export class MemberDrawerComponent {
     }, () => this.isGroupsLoading = false);
   }
 
-  onIdentityTypeChange(identityType) {
-    const control = this.memberForm.get('identity');
-
-    if (identityType === 'email') {
-      control.setValidators([Validators.email, Validators.required]);
-    }
-
-    if (identityType === 'phoneNumber') {
-      control.setValidators([phoneNumberValidator, Validators.required]);
-    }
-
-    control.updateValueAndValidity();
-  }
-
   onClose() {
     this.isPermissionInvalid = false;
-    this.memberForm.reset({ identityType: 'phoneNumber' });
     this.close.emit();
   }
 
@@ -121,12 +105,12 @@ export class MemberDrawerComponent {
       return;
     }
 
-    let { policyId, groupId, identity, identityType, name } = this.memberForm.value;
+    let { policyId, groupId, email, name } = this.memberForm.value;
     const policyIds = !!policyId ? [policyId] : [];
     const groupIds = !!groupId ? [groupId] : [];
 
     this.isLoading = true;
-    this.memberService.create({identity, identityType, policyIds, groupIds, name, role: 'Admin'}).subscribe(
+    this.memberService.create({email, policyIds, groupIds, name}).subscribe(
       () => {
         this.isLoading = false;
         this.close.emit(true);
diff --git a/modules/front-end/src/app/core/components/metric-drawer/metric-drawer.component.ts b/modules/front-end/src/app/core/components/metric-drawer/metric-drawer.component.ts
index 52bd35187..7cadef040 100644
--- a/modules/front-end/src/app/core/components/metric-drawer/metric-drawer.component.ts
+++ b/modules/front-end/src/app/core/components/metric-drawer/metric-drawer.component.ts
@@ -3,12 +3,12 @@ import { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';
 import { NzMessageService } from 'ng-zorro-antd/message';
 import { BehaviorSubject } from 'rxjs';
 import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
-import { IAccount } from '@shared/types';
+import { IOrganization } from '@shared/types';
 import { CustomEventSuccessCriteria, CustomEventTrackOption, EventType, IMetric, UrlMatchType } from '@features/safe/feature-flags/types/experimentations';
 import { MetricService } from '@services/metric.service';
 import { TeamService } from '@services/team.service';
 import { uuidv4 } from '@utils/index';
-import { CURRENT_ACCOUNT } from "@utils/localstorage-keys";
+import { CURRENT_ORGANIZATION } from "@utils/localstorage-keys";
 
 @Component({
   selector: 'app-metric-drawer',
@@ -62,7 +62,7 @@ export class MetricDrawerComponent implements OnInit {
     private metricService: MetricService,
     private message: NzMessageService
   ) {
-    const currentAccount: IAccount = JSON.parse(localStorage.getItem(CURRENT_ACCOUNT()));
+    const currentAccount: IOrganization = JSON.parse(localStorage.getItem(CURRENT_ORGANIZATION()));
 
     this.maintainerSearchChange$.pipe(
       debounceTime(500),
diff --git a/modules/front-end/src/app/core/components/account-drawer/account-drawer.component.html b/modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.html
similarity index 67%
rename from modules/front-end/src/app/core/components/account-drawer/account-drawer.component.html
rename to modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.html
index b5f086fa5..fa2021e46 100644
--- a/modules/front-end/src/app/core/components/account-drawer/account-drawer.component.html
+++ b/modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.html
@@ -8,11 +8,11 @@
   nzTitle="Create organization"
   (nzOnClose)="onClose()">
   <ng-container *nzDrawerContent>
-    <form nz-form [formGroup]="accountForm" (ngSubmit)="doSubmit()" nzLayout="vertical">
+    <form nz-form [formGroup]="orgForm" (ngSubmit)="doSubmit()" nzLayout="vertical">
       <nz-form-item>
-        <nz-form-label nzRequired i18n="@@org.org.orgName">Organization name</nz-form-label>
+        <nz-form-label nzRequired i18n="@@common.name">Name</nz-form-label>
         <nz-form-control i18n-nzErrorTip="@@org.org.orgMandatory" nzErrorTip="Organization name is mandatory!">
-          <input type="text" nz-input formControlName="organizationName" placeholder="Organization name" i18n-placeholder="@org.org.orgNamePlaceholder"/>
+          <input type="text" nz-input formControlName="name" placeholder="Name" i18n-placeholder="@@common.name"/>
         </nz-form-control>
       </nz-form-item>
       <button nz-button class="submit-btn" nzType="primary" [nzLoading]="isLoading" i18n="@@common.save">Save</button>
diff --git a/modules/front-end/src/app/core/components/account-drawer/account-drawer.component.less b/modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.less
similarity index 100%
rename from modules/front-end/src/app/core/components/account-drawer/account-drawer.component.less
rename to modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.less
diff --git a/modules/front-end/src/app/core/components/account-drawer/account-drawer.component.spec.ts b/modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.spec.ts
similarity index 56%
rename from modules/front-end/src/app/core/components/account-drawer/account-drawer.component.spec.ts
rename to modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.spec.ts
index e93a6e6d9..66de09383 100644
--- a/modules/front-end/src/app/core/components/account-drawer/account-drawer.component.spec.ts
+++ b/modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.spec.ts
@@ -1,20 +1,20 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 
-import { AccountDrawerComponent } from './account-drawer.component';
+import { OrganizationDrawerComponent } from './organization-drawer.component';
 
 describe('AccountDrawerComponent', () => {
-  let component: AccountDrawerComponent;
-  let fixture: ComponentFixture<AccountDrawerComponent>;
+  let component: OrganizationDrawerComponent;
+  let fixture: ComponentFixture<OrganizationDrawerComponent>;
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      declarations: [ AccountDrawerComponent ]
+      declarations: [ OrganizationDrawerComponent ]
     })
     .compileComponents();
   });
 
   beforeEach(() => {
-    fixture = TestBed.createComponent(AccountDrawerComponent);
+    fixture = TestBed.createComponent(OrganizationDrawerComponent);
     component = fixture.componentInstance;
     fixture.detectChanges();
   });
diff --git a/modules/front-end/src/app/core/components/account-drawer/account-drawer.component.ts b/modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.ts
similarity index 55%
rename from modules/front-end/src/app/core/components/account-drawer/account-drawer.component.ts
rename to modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.ts
index 177a166b3..0b0db9cf8 100644
--- a/modules/front-end/src/app/core/components/account-drawer/account-drawer.component.ts
+++ b/modules/front-end/src/app/core/components/organization-drawer/organization-drawer.component.ts
@@ -1,16 +1,16 @@
 import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
 import { NzMessageService } from 'ng-zorro-antd/message';
-import { AccountService } from '@services/account.service';
+import { OrganizationService } from '@services/organization.service';
 
 @Component({
-  selector: 'app-account-drawer',
-  templateUrl: './account-drawer.component.html',
-  styleUrls: ['./account-drawer.component.less']
+  selector: 'organization-drawer',
+  templateUrl: './organization-drawer.component.html',
+  styleUrls: ['./organization-drawer.component.less']
 })
-export class AccountDrawerComponent implements OnInit {
+export class OrganizationDrawerComponent implements OnInit {
 
-  accountForm: FormGroup;
+  orgForm: FormGroup;
 
   isLoading: boolean = false;
 
@@ -19,7 +19,7 @@ export class AccountDrawerComponent implements OnInit {
 
   constructor(
     private fb: FormBuilder,
-    private accountService: AccountService,
+    private accountService: OrganizationService,
     private message: NzMessageService
   ) { }
 
@@ -28,30 +28,30 @@ export class AccountDrawerComponent implements OnInit {
   }
 
   initForm() {
-    this.accountForm = this.fb.group({
-      organizationName: ['', [Validators.required]]
+    this.orgForm = this.fb.group({
+      name: ['', [Validators.required]]
     });
   }
 
   onClose() {
-    this.accountForm.reset();
+    this.orgForm.reset();
     this.close.emit();
   }
 
   doSubmit() {
-    if (this.accountForm.invalid) {
-      for (const i in this.accountForm.controls) {
-        this.accountForm.controls[i].markAsDirty();
-        this.accountForm.controls[i].updateValueAndValidity();
+    if (this.orgForm.invalid) {
+      for (const i in this.orgForm.controls) {
+        this.orgForm.controls[i].markAsDirty();
+        this.orgForm.controls[i].updateValueAndValidity();
       }
       return;
     }
 
     this.isLoading = true;
 
-    const { organizationName } = this.accountForm.value;
+    const { name } = this.orgForm.value;
 
-    this.accountService.postCreateAccount({ organizationName })
+    this.accountService.createOrganization({ name })
       .pipe()
       .subscribe(
         res => {
diff --git a/modules/front-end/src/app/core/components/project-drawer/project-drawer.component.html b/modules/front-end/src/app/core/components/project-drawer/project-drawer.component.html
index 79ea4c187..4eea2839d 100644
--- a/modules/front-end/src/app/core/components/project-drawer/project-drawer.component.html
+++ b/modules/front-end/src/app/core/components/project-drawer/project-drawer.component.html
@@ -20,9 +20,9 @@
 
     <form nz-form [formGroup]="projectForm" (ngSubmit)="doSubmit()" nzLayout="vertical">
       <nz-form-item>
-        <nz-form-label nzRequired i18n="@@org.project.projectName">Project name</nz-form-label>
+        <nz-form-label nzRequired i18n="@@common.name">Name</nz-form-label>
         <nz-form-control nzErrorTip="Project name is mandatory!" i18n-nzErrorTip="@@org.project.projectNameMandatory">
-          <input type="text" nz-input formControlName="name" placeholder="Project name" i18n-placeholder="@@org.project.projectNamePlaceholder"/>
+          <input type="text" nz-input formControlName="name" placeholder="Name" i18n-placeholder="@@common.name"/>
         </nz-form-control>
       </nz-form-item>
     </form>
diff --git a/modules/front-end/src/app/core/components/props-drawer/props-drawer.component.html b/modules/front-end/src/app/core/components/props-drawer/props-drawer.component.html
index 6296acdad..3ff13c512 100644
--- a/modules/front-end/src/app/core/components/props-drawer/props-drawer.component.html
+++ b/modules/front-end/src/app/core/components/props-drawer/props-drawer.component.html
@@ -93,7 +93,7 @@
                     </button>
 
                     <button nz-button nzSize="default" nzType="link" [nzLoading]="row.isDeleting" nzDanger
-                            [nzIcon]="iconTpl" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?" (nzOnConfirm)="archiveProp(row)">
+                            [nzIcon]="iconTpl" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it?" (nzOnConfirm)="archiveProp(row)">
                       <i nz-icon nzType="delete" nzTheme="outline"></i> <ng-container i18n="@@common.remove">Remove</ng-container>
                       <ng-template #iconTpl>
                         <i nz-icon nzType="question-circle-o" style="color: red;"></i>
@@ -197,7 +197,7 @@
                   </button>
 
                   <button nz-button nzSize="default" nzType="link" [nzLoading]="row.isDeleting" nzDanger
-                          [nzIcon]="iconTpl" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?" (nzOnConfirm)="deleteTag(row)">
+                          [nzIcon]="iconTpl" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it?" (nzOnConfirm)="deleteTag(row)">
                     <i nz-icon nzType="delete" nzTheme="outline"></i>
                     <ng-template #iconTpl>
                       <i nz-icon nzType="question-circle-o" style="color: red;"></i>
diff --git a/modules/front-end/src/app/core/core.module.ts b/modules/front-end/src/app/core/core.module.ts
index 0f4bb8061..8ab1a8fec 100644
--- a/modules/front-end/src/app/core/core.module.ts
+++ b/modules/front-end/src/app/core/core.module.ts
@@ -47,7 +47,7 @@ import {MemberDrawerComponent} from "@core/components/member-drawer/member-drawe
 import {MessageComponent} from "@core/components/message/message.component";
 import {GroupDrawerComponent} from "@core/components/group-drawer/group-drawer.component";
 import {PolicyDrawerComponent} from "@core/components/policy-drawer/policy-drawer.component";
-import {AccountDrawerComponent} from "@core/components/account-drawer/account-drawer.component";
+import {OrganizationDrawerComponent} from "@core/components/organization-drawer/organization-drawer.component";
 import {EnvDrawerComponent} from "@core/components/env-drawer/env-drawer.component";
 import {PermissionCheckComponent} from "@core/components/permission-check/permission-check.component";
 import {ProjectDrawerComponent} from "@core/components/project-drawer/project-drawer.component";
@@ -85,7 +85,7 @@ import {TranslationPipe} from "@core/pipes/translation.pipe";
     MessageComponent,
     GroupDrawerComponent,
     PolicyDrawerComponent,
-    AccountDrawerComponent,
+    OrganizationDrawerComponent,
     EnvDrawerComponent,
     PermissionCheckComponent,
     ProjectDrawerComponent,
@@ -160,7 +160,7 @@ import {TranslationPipe} from "@core/pipes/translation.pipe";
     MessageComponent,
     GroupDrawerComponent,
     PolicyDrawerComponent,
-    AccountDrawerComponent,
+    OrganizationDrawerComponent,
     EnvDrawerComponent,
     PermissionCheckComponent,
     ProjectDrawerComponent,
diff --git a/modules/front-end/src/app/core/guards/auth.guard.ts b/modules/front-end/src/app/core/guards/auth.guard.ts
index 5452bdb45..c2b2620e4 100644
--- a/modules/front-end/src/app/core/guards/auth.guard.ts
+++ b/modules/front-end/src/app/core/guards/auth.guard.ts
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
 import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router } from '@angular/router';
 import { getAuth } from '@shared/utils';
 import { LOGIN_REDIRECT_URL } from "@shared/utils/localstorage-keys";
-import { AccountService } from '@core/services/account.service';
+import { OrganizationService } from '@services/organization.service';
 import {PermissionsService} from "@services/permissions.service";
 
 @Injectable({
@@ -12,7 +12,7 @@ export class AuthGuard implements CanActivate {
 
   constructor(
     private router: Router,
-    private accountService: AccountService,
+    private accountService: OrganizationService,
     private permissionsService: PermissionsService
   ) { }
 
@@ -29,8 +29,8 @@ export class AuthGuard implements CanActivate {
 
       // check if account is initialized
       if (!url.startsWith("/initialization")) {
-        const accountProj = this.accountService.getCurrentAccountProjectEnv();
-        if (accountProj.account?.initialized === false) {
+        const accountProj = this.accountService.getCurrentOrganizationProjectEnv();
+        if (accountProj.organization?.initialized === false) {
           return this.router.parseUrl('/initialization');
         }
       }
diff --git a/modules/front-end/src/app/core/interceptors/token.interceptor.ts b/modules/front-end/src/app/core/interceptors/request-response.interceptor.ts
similarity index 60%
rename from modules/front-end/src/app/core/interceptors/token.interceptor.ts
rename to modules/front-end/src/app/core/interceptors/request-response.interceptor.ts
index 99753a350..50574a049 100644
--- a/modules/front-end/src/app/core/interceptors/token.interceptor.ts
+++ b/modules/front-end/src/app/core/interceptors/request-response.interceptor.ts
@@ -1,13 +1,21 @@
-import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from "@angular/common/http";
+import {
+  HttpErrorResponse,
+  HttpEvent,
+  HttpHandler,
+  HttpInterceptor,
+  HttpRequest,
+  HttpResponse
+} from "@angular/common/http";
 import {Observable} from "rxjs";
-import { catchError } from 'rxjs/operators';
+import {catchError, map} from 'rxjs/operators';
 import {Router} from "@angular/router";
 import {NzMessageService} from "ng-zorro-antd/message";
 import {Injectable} from "@angular/core";
 import {IDENTITY_TOKEN} from "../../shared/utils/localstorage-keys";
+import {IResponse} from "@shared/types";
 
 @Injectable()
-export class TokenInterceptor implements HttpInterceptor {
+export class RequestResponseInterceptor implements HttpInterceptor {
 
   constructor(
     private message: NzMessageService,
@@ -21,6 +29,18 @@ export class TokenInterceptor implements HttpInterceptor {
 
     return next.handle(authedReq)
       .pipe(
+        map(event => {
+          if (event instanceof HttpResponse && !event.url.endsWith('/login-by-email')) {
+            const body = event.body as IResponse;
+            if (!body.success && body.errors.length > 0) {
+              this.message.error(body.errors.join('/'));
+            } else {
+              event = event.clone({ body: event.body.data });
+            }
+          }
+
+          return event;
+        }),
         catchError((errorResponse: HttpErrorResponse) => {
           if (errorResponse.status === 401) {
             localStorage.clear();
diff --git a/modules/front-end/src/app/core/pipes/policy-type.pipe.ts b/modules/front-end/src/app/core/pipes/policy-type.pipe.ts
index 7f27ae71f..259e7e097 100644
--- a/modules/front-end/src/app/core/pipes/policy-type.pipe.ts
+++ b/modules/front-end/src/app/core/pipes/policy-type.pipe.ts
@@ -5,8 +5,8 @@ import { Pipe, PipeTransform } from '@angular/core';
 })
 export class PolicyTypePipe implements PipeTransform {
   typeDict = {
-    'FFCManaged': '敏捷开关托管',
-    'CustomerManaged': '客户托管'
+    'SysManaged': $localize `:@@permission.sys-managed:System Managed`,
+    'CustomerManaged': $localize `:@@permission.customer-managed:Customer Managed`
   }
 
   transform(value: string): string {
diff --git a/modules/front-end/src/app/core/services/account-preject-env-resolver.service.ts b/modules/front-end/src/app/core/services/account-preject-env-resolver.service.ts
index b1a5ca10e..d1e76e982 100644
--- a/modules/front-end/src/app/core/services/account-preject-env-resolver.service.ts
+++ b/modules/front-end/src/app/core/services/account-preject-env-resolver.service.ts
@@ -3,20 +3,20 @@ import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
 import { Observable, of } from 'rxjs';
 import { take, mergeMap } from 'rxjs/operators';
 import { ProjectService } from '@services/project.service';
-import { AccountService } from '@services/account.service';
-import { IAccount, IProjectEnv } from '@shared/types';
+import { OrganizationService } from '@services/organization.service';
+import { IOrganization, IProjectEnv } from '@shared/types';
 
 @Injectable()
 export class AccountProjectEnvResolver implements Resolve<any> {
   constructor(
     private projectService: ProjectService,
-    private accountService: AccountService,
+    private accountService: OrganizationService,
   ) { }
 
   resolve(route: ActivatedRouteSnapshot): Observable<any> {
-    return this.accountService.getCurrentAccount().pipe(
+    return this.accountService.getCurrentOrganization().pipe(
         take(1),
-        mergeMap((account: IAccount) => {
+        mergeMap((account: IOrganization) => {
             return this.projectService.getCurrentProjectEnv(account.id).pipe(
               take(1),
               mergeMap((projectEnv: IProjectEnv) => {
diff --git a/modules/front-end/src/app/core/services/account.service.ts b/modules/front-end/src/app/core/services/account.service.ts
deleted file mode 100644
index b1eff9a40..000000000
--- a/modules/front-end/src/app/core/services/account.service.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-import { HttpClient } from '@angular/common/http';
-import { Injectable } from '@angular/core';
-import { Observable } from 'rxjs';
-import { environment } from 'src/environments/environment';
-import { IAccount, IProjectEnv, IAccountProjectEnv } from '@shared/types';
-import { ProjectService } from './project.service';
-import { CURRENT_ACCOUNT, CURRENT_PROJECT } from "@utils/localstorage-keys";
-
-@Injectable({
-  providedIn: 'root'
-})
-export class AccountService {
-  baseUrl = `${environment.url}/api/v2/accounts`;
-  accounts: IAccount[] = [];
-
-  constructor(
-    private http: HttpClient,
-    private projectService: ProjectService
-  ) { }
-
-  // 获取 account 列表
-  getAccounts(): Observable<any> {
-    const url = this.baseUrl;
-    return this.http.get(url);
-  }
-
-// 创建 account
-  postCreateAccount(params: any): Observable<any> {
-    const url = this.baseUrl;
-    return this.http.post(url, params);
-  }
-
-  // 更新 account
-  putUpdateAccount(params: any): Observable<any> {
-    const url = this.baseUrl;
-    return this.http.put(url, params);
-  }
-
-  initialize(id: any, params: any): Observable<any> {
-    const url = `${this.baseUrl}/${id}/initialize`;
-    return this.http.post(url, params);
-  }
-
-  changeAccount(account: IAccount) {
-    if (!!account) {
-      localStorage.setItem(CURRENT_ACCOUNT(), JSON.stringify(account));
-      const currentAccount = this.accounts.find(ws => ws.id == account.id);
-      currentAccount.organizationName = account.organizationName;
-    } else {
-      localStorage.setItem(CURRENT_ACCOUNT(), '');
-    }
-
-    this.projectService.clearCurrentProjectEnv();
-    window.location.reload();
-  }
-
-  setAccount(account: IAccount) {
-    if (!!account) {
-      localStorage.setItem(CURRENT_ACCOUNT(), JSON.stringify(account));
-      const currentAccount = this.accounts.find(ws => ws.id == account.id);
-      currentAccount.organizationName = account.organizationName;
-    } else {
-      localStorage.setItem(CURRENT_ACCOUNT(), '');
-    }
-  }
-
-  getCurrentAccount(): Observable<IAccount> {
-    return new Observable(observer => {
-      const accountStr = localStorage.getItem(CURRENT_ACCOUNT());
-      if (this.accounts.length === 0 || !accountStr || JSON.parse(accountStr)?.plan === undefined) {
-        this.getAccounts().subscribe(res => {
-          this.accounts = res as IAccount[];
-          if (!accountStr || JSON.parse(accountStr)?.plan === undefined) {
-            const currentAcount = this.accounts[0];
-            localStorage.setItem(CURRENT_ACCOUNT(), JSON.stringify(currentAcount));
-            observer.next(currentAcount);
-          } else {
-            observer.next(this.accounts.find(ws => ws.id == JSON.parse(accountStr).id));
-          }
-        });
-      } else {
-        observer.next(this.accounts.find(ws => ws.id == JSON.parse(accountStr).id));
-      }
-    });
-  }
-
-  getCurrentAccountProjectEnv(): IAccountProjectEnv {
-    const account: IAccount = JSON.parse(localStorage.getItem(CURRENT_ACCOUNT())!);
-    const projectEnv: IProjectEnv = JSON.parse(localStorage.getItem(CURRENT_PROJECT())!);
-    return {
-      account,
-      projectEnv
-    };
-  }
-}
diff --git a/modules/front-end/src/app/core/services/env-setting.service.ts b/modules/front-end/src/app/core/services/env-setting.service.ts
index ed96af698..c50d2ead2 100644
--- a/modules/front-end/src/app/core/services/env-setting.service.ts
+++ b/modules/front-end/src/app/core/services/env-setting.service.ts
@@ -12,7 +12,7 @@ export class EnvSettingService {
   get baseUrl() {
     const envId = getCurrentProjectEnv().envId;
 
-    return `${environment.url}/api/v2/envs/${envId}/settings`
+    return `${environment.url}/api/v1/envs/${envId}/settings`
   }
 
   constructor(private http: HttpClient) { }
diff --git a/modules/front-end/src/app/core/services/env-user-prop.service.ts b/modules/front-end/src/app/core/services/env-user-prop.service.ts
index fc0673c7b..03d8927f4 100644
--- a/modules/front-end/src/app/core/services/env-user-prop.service.ts
+++ b/modules/front-end/src/app/core/services/env-user-prop.service.ts
@@ -13,7 +13,7 @@ export class EnvUserPropService {
   get baseUrl() {
     const envId = getCurrentProjectEnv().envId;
 
-    return `${environment.url}/api/v2/envs/${envId}/user-property`
+    return `${environment.url}/api/v1/envs/${envId}/user-property`
   }
 
   constructor(private http: HttpClient) {
diff --git a/modules/front-end/src/app/core/services/env-user.service.ts b/modules/front-end/src/app/core/services/env-user.service.ts
index 138c5e638..dab8172a3 100644
--- a/modules/front-end/src/app/core/services/env-user.service.ts
+++ b/modules/front-end/src/app/core/services/env-user.service.ts
@@ -22,20 +22,20 @@ export class EnvUserService {
   }
 
   get(id: string): Observable<IUserType> {
-    const url = this.baseUrl + `/api/v2/envs/${this.envId}/users/${id}`;
+    const url = this.baseUrl + `/api/v1/envs/${this.envId}/users/${id}`;
 
     return this.http.get<IUserType>(url);
   }
 
   // get users by key ids
   public getUsersByKeyIds(keyIds: string[]): Observable<any> {
-    const url = this.baseUrl + `/api/v2/envs/${this.envId}/users/byKeyIds`;
+    const url = this.baseUrl + `/api/v1/envs/${this.envId}/users/byKeyIds`;
     return this.http.post(url, { keyIds });
   }
 
   // upsert users
   public upsert(params): Observable<any> {
-    const url = this.baseUrl + `/api/v2/envs/${this.envId}/users`;
+    const url = this.baseUrl + `/api/v1/envs/${this.envId}/users`;
     return this.http.put(url, { ...params });
   }
 
@@ -47,7 +47,7 @@ export class EnvUserService {
       pageSize: filter.pageSize,
     };
 
-    const url = this.baseUrl + `/api/v2/envs/${this.envId}/users/search`;
+    const url = this.baseUrl + `/api/v1/envs/${this.envId}/users/search`;
     return this.http.get<EnvUserPagedResult>(url, {params: new HttpParams({fromObject: queryParam})});
   }
 
@@ -75,7 +75,7 @@ export class EnvUserService {
       .set('pageIndex', pageIndex)
       .set('pageSize', pageSize);
 
-    const url = this.baseUrl + `/api/v2/envs/${this.envId}/users/rest-search`;
+    const url = this.baseUrl + `/api/v1/envs/${this.envId}/users/rest-search`;
     return this.http.get<EnvUserPagedResult>(url, { params: params });
   }
 }
diff --git a/modules/front-end/src/app/core/services/env.service.ts b/modules/front-end/src/app/core/services/env.service.ts
index 8daf51237..04095a519 100644
--- a/modules/front-end/src/app/core/services/env.service.ts
+++ b/modules/front-end/src/app/core/services/env.service.ts
@@ -8,38 +8,33 @@ import { IEnvironment, IEnvKey } from '@shared/types';
   providedIn: 'root'
 })
 export class EnvService {
-  baseUrl = `${environment.url}/api/v2/accounts/#accountId/projects/#projectId/envs`;
+  baseUrl = `${environment.url}/api/v1/organizations/#organizationId/projects/#projectId/envs`;
   envs: IEnvironment[] = [];
 
   constructor(private http: HttpClient) { }
 
-  // 获取 env 列表
-  public getEnvs(accountId: number, projectId: number): Observable<IEnvironment[]> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`).replace(/#projectId/ig, `${projectId}`);
+  public getEnvs(organizationId: number, projectId: number): Observable<IEnvironment[]> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`).replace(/#projectId/ig, `${projectId}`);
     return this.http.get<IEnvironment[]>(url);
   }
 
-  // 创建 env
-  postCreateEnv(accountId: number, projectId: number, params): Observable<any> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`).replace(/#projectId/ig, `${projectId}`);
+  postCreateEnv(organizationId: number, projectId: number, params): Observable<any> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`).replace(/#projectId/ig, `${projectId}`);
     return this.http.post(url, params);
   }
 
-  // 更新 env
-  putUpdateEnv(accountId: number, projectId: number, params): Observable<any> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`).replace(/#projectId/ig, `${projectId}`);
+  putUpdateEnv(organizationId: number, projectId: number, params): Observable<any> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`).replace(/#projectId/ig, `${projectId}`);
     return this.http.put(url, params);
   }
 
-  // 重新生成 env secret
-  putUpdateEnvKey(accountId: number, projectId: number, envId: number, params: IEnvKey): Observable<IEnvKey> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`).replace(/#projectId/ig, `${projectId}`) + `/${envId}/key`;
+  putUpdateEnvKey(organizationId: number, projectId: number, envId: number, params: IEnvKey): Observable<IEnvKey> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`).replace(/#projectId/ig, `${projectId}`) + `/${envId}/key`;
     return this.http.put<IEnvKey>(url, params);
   }
 
-  // 删除 env
-  removeEnv(accountId: number, projectId: number, envId: number): Observable<any> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`).replace(/#projectId/ig, `${projectId}`) + `/${envId}`;
+  removeEnv(organizationId: number, projectId: number, envId: number): Observable<any> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`).replace(/#projectId/ig, `${projectId}`) + `/${envId}`;
     return this.http.delete(url);
   }
 }
diff --git a/modules/front-end/src/app/core/services/group.service.ts b/modules/front-end/src/app/core/services/group.service.ts
index 36884f4e3..8f099317f 100644
--- a/modules/front-end/src/app/core/services/group.service.ts
+++ b/modules/front-end/src/app/core/services/group.service.ts
@@ -9,7 +9,7 @@ import {
   IPagedGroupMember, IPagedGroupPolicy
 } from "@features/safe/iam/types/group";
 import { HttpClient, HttpParams } from "@angular/common/http";
-import { getCurrentAccount } from "@utils/project-env";
+import { getCurrentOrganization } from "@utils/project-env";
 import { environment } from "src/environments/environment";
 import { catchError } from "rxjs/operators";
 
@@ -20,8 +20,8 @@ export class GroupService {
   constructor(private http: HttpClient) { }
 
   get baseUrl() {
-    const accountId = getCurrentAccount().id;
-    return `${environment.url}/api/v2/accounts/${accountId}/groups`;
+    const organizationId = getCurrentOrganization().id;
+    return `${environment.url}/api/v1/organizations/${organizationId}/groups`;
   }
 
   getList(filter: GroupListFilter = new GroupListFilter()): Observable<IPagedGroup> {
diff --git a/modules/front-end/src/app/core/services/identity.service.ts b/modules/front-end/src/app/core/services/identity.service.ts
new file mode 100644
index 000000000..f2f97a5b2
--- /dev/null
+++ b/modules/front-end/src/app/core/services/identity.service.ts
@@ -0,0 +1,73 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from "@angular/common/http";
+import { environment } from "src/environments/environment";
+import {
+  CURRENT_ORGANIZATION, CURRENT_LANGUAGE,
+  CURRENT_PROJECT,
+  IDENTITY_TOKEN,
+  LOGIN_REDIRECT_URL,
+  USER_PROFILE
+} from "@utils/localstorage-keys";
+import { Router } from "@angular/router";
+import { OrganizationService } from '@services/organization.service';
+import {UserService} from "@services/user.service";
+import {IResponse} from "@shared/types";
+
+@Injectable({
+  providedIn: 'root'
+})
+export class IdentityService {
+
+  baseUrl: string = `${environment.url}/api/v1/identity`
+
+  constructor(
+    private http: HttpClient,
+    private router: Router,
+    private accountService: OrganizationService,
+    private userService: UserService
+  ) { }
+
+  loginByEmail(email: string, password: string) {
+    return this.http.post(`${this.baseUrl}/login-by-email`, { email, password });
+  }
+
+  async doLoginUser(token: string): Promise<void> {
+    return new Promise<void>((resolve) => {
+      if (!token) {
+        resolve();
+        return;
+      }
+
+      // store identity token
+      localStorage.setItem(IDENTITY_TOKEN, token);
+
+      // store user profile
+      this.userService.getProfile().subscribe((profile: IResponse) => {
+        localStorage.setItem(USER_PROFILE, JSON.stringify(profile));
+        this.accountService.getCurrentOrganization().subscribe(() => {
+          resolve();
+          const redirectUrl = localStorage.getItem(LOGIN_REDIRECT_URL);
+          if (redirectUrl) {
+            localStorage.removeItem(LOGIN_REDIRECT_URL);
+            this.router.navigateByUrl(redirectUrl);
+          } else {
+            this.router.navigateByUrl('/');
+          }
+        }, () => resolve());
+      }, () => resolve());
+    });
+  }
+
+  async doLogoutUser() {
+    const storageToKeep = {
+      // restore account and project, so when user login, he would always see the same project & env
+      [CURRENT_ORGANIZATION()]: localStorage.getItem(CURRENT_ORGANIZATION()),
+      [CURRENT_PROJECT()]: localStorage.getItem(CURRENT_PROJECT()),
+      [CURRENT_LANGUAGE()]: localStorage.getItem(CURRENT_LANGUAGE()),
+    };
+
+    localStorage.clear();
+    Object.keys(storageToKeep).forEach(k => localStorage.setItem(k, storageToKeep[k]))
+    this.router.navigateByUrl('/login').then();
+  }
+}
diff --git a/modules/front-end/src/app/core/services/member.service.ts b/modules/front-end/src/app/core/services/member.service.ts
index 7cc1bb3cc..8fb4d7b26 100644
--- a/modules/front-end/src/app/core/services/member.service.ts
+++ b/modules/front-end/src/app/core/services/member.service.ts
@@ -1,6 +1,6 @@
 import { Injectable } from "@angular/core";
 import { HttpClient, HttpParams } from "@angular/common/http";
-import { getCurrentAccount } from "@utils/project-env";
+import { getCurrentOrganization } from "@utils/project-env";
 import { environment } from "src/environments/environment";
 import { Observable } from "rxjs";
 import {
@@ -20,8 +20,8 @@ export class MemberService {
   constructor(private http: HttpClient) { }
 
   get baseUrl() {
-    const accountId = getCurrentAccount().id;
-    return `${environment.url}/api/v2/accounts/${accountId}/members`;
+    const organizationId = getCurrentOrganization().id;
+    return `${environment.url}/api/v1/organizations/${organizationId}/members`;
   }
 
   getList(filter: MemberFilter = new MemberFilter()): Observable<IPagedMember> {
@@ -47,7 +47,7 @@ export class MemberService {
     };
 
     return this.http.get<IPagedMemberGroup>(
-      `${this.baseUrl}/${id}/group`,
+      `${this.baseUrl}/${id}/groups`,
       {params: new HttpParams({fromObject: queryParam})}
     );
   }
diff --git a/modules/front-end/src/app/core/services/organization.service.ts b/modules/front-end/src/app/core/services/organization.service.ts
new file mode 100644
index 000000000..3fdd68bb6
--- /dev/null
+++ b/modules/front-end/src/app/core/services/organization.service.ts
@@ -0,0 +1,92 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs';
+import { environment } from 'src/environments/environment';
+import { IOrganization, IProjectEnv, IOrganizationProjectEnv } from '@shared/types';
+import { ProjectService } from './project.service';
+import { CURRENT_ORGANIZATION, CURRENT_PROJECT } from "@utils/localstorage-keys";
+
+@Injectable({
+  providedIn: 'root'
+})
+export class OrganizationService {
+  baseUrl = `${environment.url}/api/v1/organizations`;
+  organizations: IOrganization[] = [];
+
+  constructor(
+    private http: HttpClient,
+    private projectService: ProjectService
+  ) { }
+
+  getOrganizations(): Observable<any> {
+    const url = this.baseUrl;
+    return this.http.get(url);
+  }
+
+  createOrganization(params: any): Observable<any> {
+    const url = this.baseUrl;
+    return this.http.post(url, params);
+  }
+
+  updateOrganization(params: any): Observable<any> {
+    const url = this.baseUrl;
+    return this.http.put(url, params);
+  }
+
+  initialize(id: any, params: any): Observable<any> {
+    const url = `${this.baseUrl}/${id}/initialize`;
+    return this.http.post(url, params);
+  }
+
+  switchOrganization(account: IOrganization) {
+    if (!!account) {
+      localStorage.setItem(CURRENT_ORGANIZATION(), JSON.stringify(account));
+      const currentAccount = this.organizations.find(ws => ws.id == account.id);
+      currentAccount.name = account.name;
+    } else {
+      localStorage.setItem(CURRENT_ORGANIZATION(), '');
+    }
+
+    this.projectService.clearCurrentProjectEnv();
+    window.location.reload();
+  }
+
+  setOrganization(organization: IOrganization) {
+    if (!!organization) {
+      localStorage.setItem(CURRENT_ORGANIZATION(), JSON.stringify(organization));
+      const currentAccount = this.organizations.find(ws => ws.id == organization.id);
+      currentAccount.name = organization.name;
+    } else {
+      localStorage.setItem(CURRENT_ORGANIZATION(), '');
+    }
+  }
+
+  getCurrentOrganization(): Observable<IOrganization> {
+    return new Observable(observer => {
+      const accountStr = localStorage.getItem(CURRENT_ORGANIZATION());
+      if (this.organizations.length === 0 || !accountStr || JSON.parse(accountStr)?.plan === undefined) {
+        this.getOrganizations().subscribe(res => {
+          this.organizations = res as IOrganization[];
+          if (!accountStr || JSON.parse(accountStr)?.plan === undefined) {
+            const currentAcount = this.organizations[0];
+            localStorage.setItem(CURRENT_ORGANIZATION(), JSON.stringify(currentAcount));
+            observer.next(currentAcount);
+          } else {
+            observer.next(this.organizations.find(ws => ws.id == JSON.parse(accountStr).id));
+          }
+        });
+      } else {
+        observer.next(this.organizations.find(ws => ws.id == JSON.parse(accountStr).id));
+      }
+    });
+  }
+
+  getCurrentOrganizationProjectEnv(): IOrganizationProjectEnv {
+    const organization: IOrganization = JSON.parse(localStorage.getItem(CURRENT_ORGANIZATION())!);
+    const projectEnv: IProjectEnv = JSON.parse(localStorage.getItem(CURRENT_PROJECT())!);
+    return {
+      organization,
+      projectEnv
+    };
+  }
+}
diff --git a/modules/front-end/src/app/core/services/permissions.service.ts b/modules/front-end/src/app/core/services/permissions.service.ts
index cc47409ad..7ebb4c8f5 100644
--- a/modules/front-end/src/app/core/services/permissions.service.ts
+++ b/modules/front-end/src/app/core/services/permissions.service.ts
@@ -10,7 +10,7 @@ import {EffectEnum, ResourceTypeEnum} from "@features/safe/iam/components/policy
 export class PermissionsService {
   private permissions: IPolicyStatement[];
 
-  genericDenyMessage: string = '您未被授权进行该操作, 请联系账户管理员添加相关权限';
+  genericDenyMessage: string = $localize `:@@permissions.need-permissions-to-operate:You don't have permissions to take this action, please contact the admin to grant you the necessary permissions`;
 
   constructor(private memberSvc: MemberService) {
   }
diff --git a/modules/front-end/src/app/core/services/policy.service.ts b/modules/front-end/src/app/core/services/policy.service.ts
index a5458dc2a..8fbf5cf39 100644
--- a/modules/front-end/src/app/core/services/policy.service.ts
+++ b/modules/front-end/src/app/core/services/policy.service.ts
@@ -1,6 +1,6 @@
 import { Injectable } from "@angular/core";
 import { HttpClient, HttpParams } from "@angular/common/http";
-import { getCurrentAccount } from "@utils/project-env";
+import { getCurrentOrganization } from "@utils/project-env";
 import { environment } from "src/environments/environment";
 import { Observable, of } from "rxjs";
 import {
@@ -22,8 +22,8 @@ export class PolicyService {
   constructor(private http: HttpClient) { }
 
   get baseUrl() {
-    const accountId = getCurrentAccount().id;
-    return `${environment.url}/api/v2/accounts/${accountId}/policies`;
+    const organizationId = getCurrentOrganization().id;
+    return `${environment.url}/api/v1/organizations/${organizationId}/policies`;
   }
 
   getList(filter: PolicyFilter = new PolicyFilter()): Observable<IPagedPolicy> {
diff --git a/modules/front-end/src/app/core/services/project.service.ts b/modules/front-end/src/app/core/services/project.service.ts
index 1a5b60fab..f3e981310 100644
--- a/modules/front-end/src/app/core/services/project.service.ts
+++ b/modules/front-end/src/app/core/services/project.service.ts
@@ -12,37 +12,37 @@ export class ProjectService {
   currentProjectEnvChanged$: Subject<void> = new Subject<void>();
   projectListChanged$: Subject<void> = new Subject<void>();
 
-  baseUrl = `${environment.url}/api/v2/accounts/#accountId/projects`;
+  baseUrl = `${environment.url}/api/v1/organizations/#organizationId/projects`;
 
 
   constructor(private http: HttpClient) { }
 
   // 获取 project 列表
-  public getProjects(accountId: number): Observable<IProject[]> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`);
+  public getProjects(organizationId: number): Observable<IProject[]> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`);
     return this.http.get<IProject[]>(url);
   }
 
-  getProject(accountId: number, projectId: number): Observable<IProject> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`) + `/${projectId}`;
+  getProject(organizationId: number, projectId: number): Observable<IProject> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`) + `/${organizationId}`;
     return this.http.get<IProject>(url);
   }
 
   // 创建 project
-  postCreateProject(accountId: number, params): Observable<any> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`);
+  postCreateProject(organizationId: number, params): Observable<any> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`);
     return this.http.post(url, params);
   }
 
   // 更新 project
-  putUpdateProject(accountId: number, params): Observable<any> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`);
+  putUpdateProject(organizationId: number, params): Observable<any> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`);
     return this.http.put(url, params);
   }
 
   // 删除 project
-  removeProject(accountId: number, projectId: number): Observable<any> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`) + `/${projectId}`;
+  removeProject(organizationId: number, projectId: number): Observable<any> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`) + `/${projectId}`;
     return this.http.delete(url);
   }
 
@@ -72,13 +72,13 @@ export class ProjectService {
   }
 
   // get current project env for account
-  getCurrentProjectEnv(accountId: number): Observable<IProjectEnv> {
+  getCurrentProjectEnv(orginzationId: number): Observable<IProjectEnv> {
     return new Observable(observer => {
       const localCurrentProjectEnv = this.getLocalCurrentProjectEnv();
       if (localCurrentProjectEnv) {
         observer.next(localCurrentProjectEnv);
       } else {
-        this.getProjects(accountId).subscribe(projects => {
+        this.getProjects(orginzationId).subscribe(projects => {
           // chose first project first env as default value
           const firstProject = projects[0];
           const firstProjectEnv = firstProject.environments[0];
diff --git a/modules/front-end/src/app/core/services/resource.service.ts b/modules/front-end/src/app/core/services/resource.service.ts
index c170d521e..c3ecf6a5c 100644
--- a/modules/front-end/src/app/core/services/resource.service.ts
+++ b/modules/front-end/src/app/core/services/resource.service.ts
@@ -1,5 +1,5 @@
 import { HttpClient } from "@angular/common/http";
-import { getCurrentAccount } from "@utils/project-env";
+import { getCurrentOrganization } from "@utils/project-env";
 import { environment } from "src/environments/environment";
 import { Resource, ResourceTypeEnum } from "@features/safe/iam/components/policy-editor/types";
 import { Observable } from "rxjs";
@@ -12,8 +12,8 @@ export class ResourceService {
   constructor(private http: HttpClient) { }
 
   get baseUrl() {
-    const accountId = getCurrentAccount().id;
-    return `${environment.url}/api/v2/accounts/${accountId}/resources`;
+    const organizationId = getCurrentOrganization().id;
+    return `${environment.url}/api/v1/organizations/${organizationId}/resources`;
   }
 
   getAll(type: ResourceTypeEnum, name: string): Observable<Resource[]> {
diff --git a/modules/front-end/src/app/core/services/segment.service.ts b/modules/front-end/src/app/core/services/segment.service.ts
index e45f3e1ca..08ad6859e 100644
--- a/modules/front-end/src/app/core/services/segment.service.ts
+++ b/modules/front-end/src/app/core/services/segment.service.ts
@@ -20,7 +20,7 @@ export class SegmentService {
   public envId: number;
 
   get baseUrl() {
-    return `${environment.url}/api/v2/envs/${this.envId}/segments`;
+    return `${environment.url}/api/v1/envs/${this.envId}/segments`;
   }
 
   constructor(private http: HttpClient) {
diff --git a/modules/front-end/src/app/core/services/switch-v2.service.ts b/modules/front-end/src/app/core/services/switch-v2.service.ts
index c028ab73e..7cf54ccf4 100644
--- a/modules/front-end/src/app/core/services/switch-v2.service.ts
+++ b/modules/front-end/src/app/core/services/switch-v2.service.ts
@@ -20,7 +20,7 @@ export class SwitchV2Service {
 
   get baseUrl() {
     const envId = getCurrentProjectEnv().envId;
-    return `${environment.url}/api/v2/envs/${envId}/feature-flag`;
+    return `${environment.url}/api/v1/envs/${envId}/feature-flag`;
   }
 
   constructor(private http: HttpClient) { }
diff --git a/modules/front-end/src/app/core/services/switch.service.ts b/modules/front-end/src/app/core/services/switch.service.ts
index 15c08a12e..7f86ae216 100644
--- a/modules/front-end/src/app/core/services/switch.service.ts
+++ b/modules/front-end/src/app/core/services/switch.service.ts
@@ -4,7 +4,7 @@ import { Router } from '@angular/router';
 import { Observable } from 'rxjs';
 import { environment } from 'src/environments/environment';
 import { CSwitchParams, IFfParams, IPrequisiteFeatureFlag } from '@features/safe/feature-flags/types/switch-new';
-import { AccountService } from './account.service';
+import { OrganizationService } from './organization.service';
 
 @Injectable({
   providedIn: 'root'
@@ -15,14 +15,14 @@ export class SwitchService {
 
   constructor(
     private http: HttpClient,
-    private accountService: AccountService,
+    private accountService: OrganizationService,
     private router: Router
   ) {
     this.initEnvIds();
   }
 
   private initEnvIds() {
-    const currentAccountProjectEnv = this.accountService.getCurrentAccountProjectEnv();
+    const currentAccountProjectEnv = this.accountService.getCurrentOrganizationProjectEnv();
     const envId = currentAccountProjectEnv.projectEnv.envId;
     if (this.envId && envId !== this.envId) {
       this.router.navigateByUrl("/feature-flags");
diff --git a/modules/front-end/src/app/core/services/team.service.ts b/modules/front-end/src/app/core/services/team.service.ts
index 6d61c2b34..4d5a97253 100644
--- a/modules/front-end/src/app/core/services/team.service.ts
+++ b/modules/front-end/src/app/core/services/team.service.ts
@@ -7,17 +7,17 @@ import { environment } from 'src/environments/environment';
   providedIn: 'root'
 })
 export class TeamService {
-  baseUrl: string = `${environment.url}/api/v2/accounts/#accountId/members`;
+  baseUrl: string = `${environment.url}/api/v1/organizations/#organizationId/members`;
 
   constructor(private http: HttpClient) { }
 
-  public getMembers(accountId: number): Observable<any> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`) + '/old-api/get-all';
+  public getMembers(organizationId: number): Observable<any> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`) + '/old-api/get-all';
     return this.http.get(url);
   }
 
-  public searchMembers(accountId: number, searchText: string): Observable<any> {
-    const url = this.baseUrl.replace(/#accountId/ig, `${accountId}`) + `/old-api/search?searchText=${searchText}`;
+  public searchMembers(organizationId: number, searchText: string): Observable<any> {
+    const url = this.baseUrl.replace(/#organizationId/ig, `${organizationId}`) + `/old-api/search?searchText=${searchText}`;
     return this.http.get(url);
   }
 }
diff --git a/modules/front-end/src/app/core/services/user.service.ts b/modules/front-end/src/app/core/services/user.service.ts
index 679e91a1c..962da2c52 100644
--- a/modules/front-end/src/app/core/services/user.service.ts
+++ b/modules/front-end/src/app/core/services/user.service.ts
@@ -1,102 +1,25 @@
 import { Injectable } from '@angular/core';
 import { HttpClient } from "@angular/common/http";
 import { environment } from "src/environments/environment";
-import {
-  CURRENT_ACCOUNT, CURRENT_LANGUAGE,
-  CURRENT_PROJECT,
-  IDENTITY_TOKEN,
-  LOGIN_REDIRECT_URL,
-  USER_PROFILE
-} from "@utils/localstorage-keys";
 import { Router } from "@angular/router";
-import { AccountService } from '@services/account.service';
 
 @Injectable({
   providedIn: 'root'
 })
 export class UserService {
 
-  baseUrl: string = `${environment.url}/api/v2/user`
+  baseUrl: string = `${environment.url}/api/v1/user`
 
   constructor(
     private http: HttpClient,
-    private router: Router,
-    private accountService: AccountService
+    private router: Router
   ) { }
 
-  registerByEmail(email: string, password: string) {
-    return this.http.post(`${this.baseUrl}/register-by-email`, { email, password });
-  }
-
-  registerByPhone(phoneNumber: string, code: string, password: string) {
-    return this.http.post(`${this.baseUrl}/register-by-phone`, { phoneNumber, code, password });
-  }
-
-  loginByPassword(identity: string, password: string) {
-    return this.http.post(`${this.baseUrl}/login-by-password`, { identity, password });
-  }
-
-  loginByPhoneCode(phoneNumber: string, code: string) {
-    return this.http.post(`${this.baseUrl}/login-by-phone-code`, { phoneNumber, code });
-  }
-
-  resetPassword(identity: string, code: string, newPassword: string) {
-    return this.http.post(`${this.baseUrl}/reset-password`, { identity, code, newPassword });
-  }
-
-  checkIdentityExists(identity: string) {
-    return this.http.get(`${this.baseUrl}/check-identity-exists?identity=${identity}`);
-  }
-
-  sendIdentityCode(identity: string, scene: string) {
-    return this.http.get(`${this.baseUrl}/send-identity-code`, { params: { identity, scene } });
-  }
-
   getProfile() {
-    return this.http.get(`${this.baseUrl}/user-profile`);
+    return this.http.get(`${this.baseUrl}/profile`);
   }
 
   updateProfile(userName: string) {
-    return this.http.put(`${this.baseUrl}/user-profile`, { userName });
-  }
-
-  async doLoginUser(token: string): Promise<void> {
-    return new Promise<void>((resolve) => {
-      if (!token) {
-        resolve();
-        return;
-      }
-
-      // store identity token
-      localStorage.setItem(IDENTITY_TOKEN, token);
-
-      // store user profile
-      this.getProfile().subscribe(profile => {
-        localStorage.setItem(USER_PROFILE, JSON.stringify(profile));
-        this.accountService.getCurrentAccount().subscribe(() => {
-          resolve();
-          const redirectUrl = localStorage.getItem(LOGIN_REDIRECT_URL);
-          if (redirectUrl) {
-            localStorage.removeItem(LOGIN_REDIRECT_URL);
-            this.router.navigateByUrl(redirectUrl);
-          } else {
-            this.router.navigateByUrl('/');
-          }
-        }, () => resolve());
-      }, () => resolve());
-    });
-  }
-
-  async doLogoutUser() {
-    const storageToKeep = {
-      // restore account and project, so when user login, he would always see the same project & env
-      [CURRENT_ACCOUNT()]: localStorage.getItem(CURRENT_ACCOUNT()),
-      [CURRENT_PROJECT()]: localStorage.getItem(CURRENT_PROJECT()),
-      [CURRENT_LANGUAGE()]: localStorage.getItem(CURRENT_LANGUAGE()),
-    };
-
-    localStorage.clear();
-    Object.keys(storageToKeep).forEach(k => localStorage.setItem(k, storageToKeep[k]))
-    this.router.navigateByUrl('/login').then();
+    return this.http.put(`${this.baseUrl}/profile`, { userName });
   }
 }
diff --git a/modules/front-end/src/app/features/login/do-login/do-login.component.ts b/modules/front-end/src/app/features/login/do-login/do-login.component.ts
index 4ffc97f05..6fa5c4bc3 100644
--- a/modules/front-end/src/app/features/login/do-login/do-login.component.ts
+++ b/modules/front-end/src/app/features/login/do-login/do-login.component.ts
@@ -3,7 +3,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
 import { Router } from '@angular/router';
 import { NzMessageService } from 'ng-zorro-antd/message';
 import { phoneNumberOrEmailValidator } from "@utils/form-validators";
-import { UserService } from "@services/user.service";
+import {IdentityService} from "@services/identity.service";
 
 @Component({
   selector: 'app-do-login',
@@ -18,7 +18,7 @@ export class DoLoginComponent implements OnInit {
 
   constructor(
     private fb: FormBuilder,
-    private userService: UserService,
+    private identityService: IdentityService,
     private router: Router,
     private message: NzMessageService
   ) { }
@@ -45,7 +45,7 @@ export class DoLoginComponent implements OnInit {
     this.isLogin = true;
 
     const {identity, password} = this.pwdLoginForm.value;
-    this.userService.loginByPassword(identity, password).subscribe(
+    this.identityService.loginByEmail(identity, password).subscribe(
       response => this.handleResponse(response),
       error => this.handleError(error)
     )
@@ -59,7 +59,7 @@ export class DoLoginComponent implements OnInit {
       return;
     }
 
-    await this.userService.doLoginUser(response.token);
+    await this.identityService.doLoginUser(response.data.token);
     this.message.success($localize `Login with success`);
   }
 
diff --git a/modules/front-end/src/app/features/safe/account-settings/account-settings.component.ts b/modules/front-end/src/app/features/safe/account-settings/account-settings.component.ts
deleted file mode 100644
index 33fffe836..000000000
--- a/modules/front-end/src/app/features/safe/account-settings/account-settings.component.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { Component, OnInit } from '@angular/core';
-
-@Component({
-  selector: 'app-account-manage',
-  templateUrl: './account-settings.component.html',
-  styleUrls: ['./account-settings.component.less']
-})
-export class AccountSettingsComponent implements OnInit {
-
-  constructor(
-  ) {
-  }
-
-  ngOnInit(): void {
-  }
-}
diff --git a/modules/front-end/src/app/features/safe/data-sync/remote-sync/remote-sync.component.html b/modules/front-end/src/app/features/safe/data-sync/remote-sync/remote-sync.component.html
index 46eca3d79..85414d510 100644
--- a/modules/front-end/src/app/features/safe/data-sync/remote-sync/remote-sync.component.html
+++ b/modules/front-end/src/app/features/safe/data-sync/remote-sync/remote-sync.component.html
@@ -86,7 +86,7 @@
             </button>
 
             <button nz-button nzSize="default" nzType="link" [nzLoading]="row.isDeleting" nzDanger [nzIcon]="iconTpl"
-              i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?" (nzOnConfirm)="deleteRow(row)">
+              i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it?" (nzOnConfirm)="deleteRow(row)">
               <i nz-icon nzType="delete" nzTheme="outline"></i>
               <ng-template #iconTpl>
                 <i nz-icon nzType="question-circle-o" style="color: red;"></i>
diff --git a/modules/front-end/src/app/features/safe/experiments/metrics/metrics.component.html b/modules/front-end/src/app/features/safe/experiments/metrics/metrics.component.html
index 16673da22..36d94436e 100644
--- a/modules/front-end/src/app/features/safe/experiments/metrics/metrics.component.html
+++ b/modules/front-end/src/app/features/safe/experiments/metrics/metrics.component.html
@@ -73,7 +73,7 @@
             <nz-divider nzType="vertical"></nz-divider>
             <a
               style="color: #717D8A"
-              i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?"
+              i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it?"
               nzPopconfirmPlacement="bottomRight"
               [nzPopconfirmOverlayStyle]="{minWidth: '240px'}"
               (nzOnConfirm)="onDeleteClick(data, errorMsgsTpl)" [nzIcon]="iconTplDelete">
diff --git a/modules/front-end/src/app/features/safe/experiments/metrics/metrics.component.ts b/modules/front-end/src/app/features/safe/experiments/metrics/metrics.component.ts
index 8f1e9d788..b6488cfcc 100644
--- a/modules/front-end/src/app/features/safe/experiments/metrics/metrics.component.ts
+++ b/modules/front-end/src/app/features/safe/experiments/metrics/metrics.component.ts
@@ -3,11 +3,11 @@ import { ActivatedRoute } from '@angular/router';
 import { NzMessageService } from 'ng-zorro-antd/message';
 import { Subject } from 'rxjs';
 import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
-import { IAccount, IAccountUser, IProjectEnv } from '@shared/types';
+import { IOrganization, IAccountUser, IProjectEnv } from '@shared/types';
 import { MetricService } from '@services/metric.service';
 import { TeamService } from '@services/team.service';
 import { CustomEventSuccessCriteria, CustomEventTrackOption, EventType, IMetric } from '../../feature-flags/types/experimentations';
-import { CURRENT_ACCOUNT, CURRENT_PROJECT } from "@utils/localstorage-keys";
+import { CURRENT_ORGANIZATION, CURRENT_PROJECT } from "@utils/localstorage-keys";
 
 @Component({
   selector: 'experiments-metrics',
@@ -24,7 +24,7 @@ export class MetricsComponent implements OnInit, OnDestroy {
   accountMemberList: IAccountUser[] = [];
 
   currentProjectEnv: IProjectEnv = null;
-  currentAccount: IAccount = null;
+  currentAccount: IOrganization = null;
 
   currentMetric: IMetric;
 
@@ -43,7 +43,7 @@ export class MetricsComponent implements OnInit, OnDestroy {
     private metricService: MetricService
   ) {
     this.currentProjectEnv = JSON.parse(localStorage.getItem(CURRENT_PROJECT()));
-    this.currentAccount = JSON.parse(localStorage.getItem(CURRENT_ACCOUNT()));
+    this.currentAccount = JSON.parse(localStorage.getItem(CURRENT_ORGANIZATION()));
 
   //   const metricId = this.route.snapshot.queryParams['id'];
   //   if (metricId) {
diff --git a/modules/front-end/src/app/features/safe/feature-flags/details/setting/setting.component.html b/modules/front-end/src/app/features/safe/feature-flags/details/setting/setting.component.html
index 78c0b36f8..13a0e477a 100644
--- a/modules/front-end/src/app/features/safe/feature-flags/details/setting/setting.component.html
+++ b/modules/front-end/src/app/features/safe/feature-flags/details/setting/setting.component.html
@@ -17,7 +17,7 @@
          nz-popconfirm="Are you sure to recover this feature flag?"
          (nzOnConfirm)="restoreFlag()">&nbsp;<ng-container i18n="@@ff.recover">Recover</ng-container>&nbsp;</a>
       <ng-container i="@@common.or">or</ng-container>
-      <a class="delete" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?" (nzOnConfirm)="deleteFlag()">&nbsp;<ng-container i18n="@@common.permanetly-remove">Permanetly Remove</ng-container>&nbsp;</a>
+      <a class="delete" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it?" (nzOnConfirm)="deleteFlag()">&nbsp;<ng-container i18n="@@common.permanetly-remove">Permanetly Remove</ng-container>&nbsp;</a>
       <ng-container i18n="@@ff.the-ff">the feature flag</ng-container>
     </div>
   </div>
@@ -51,7 +51,7 @@
         <span><ng-container i18n="@@ff.ff-is">The feature flag is</ng-container>&nbsp;<span *ngIf="switchStatus">ON</span><span *ngIf="!switchStatus">OFF</span></span>
       </div>
       <div class="disabled-variation">
-        <span class="label" i18n="@@ff.if-off-return">If OFF, return</span>
+        <span class="label" i18n="@@ff.if-off-return">If OFF, serve</span>
         <nz-select
           [compareWith]="compareWith"
           [(ngModel)]="currentSwitch.variationOptionWhenDisabled"
@@ -107,7 +107,7 @@
         <i class="expand-icon" *ngIf="!isEditingVariationOptions && ['json', 'string'].includes(variationDataType)" nz-icon nzType="expand" (click)="expandVariationOption(variationOption, true)"></i>
         <i class="copy-icon" nz-icon nzType="icons:icon-copy" (click)="copyText(variationOption.variationValue)"></i>
         <div *ngIf="isEditingVariationOptions">
-          <span class="delete-icon-wrapper" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?" nzPopconfirmPlacement="bottom" (nzOnConfirm)="deleteVariationOptionRow(variationOption.localId)">
+          <span class="delete-icon-wrapper" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it?" nzPopconfirmPlacement="bottom" (nzOnConfirm)="deleteVariationOptionRow(variationOption.localId)">
             <i nz-icon nzType="icons:icon-delete"></i>
           </span>
         </div>
diff --git a/modules/front-end/src/app/features/safe/feature-flags/details/targeting/targeting.component.html b/modules/front-end/src/app/features/safe/feature-flags/details/targeting/targeting.component.html
index e30a95ceb..3cefc87f7 100644
--- a/modules/front-end/src/app/features/safe/feature-flags/details/targeting/targeting.component.html
+++ b/modules/front-end/src/app/features/safe/feature-flags/details/targeting/targeting.component.html
@@ -3,13 +3,13 @@
     <div class="banner">
       <div class="placeholder"></div>
       <div class="action-btns">
-        <button nz-button nzType="primary" (click)="onSetExptRulesClick()">
+        <button nz-button nzType="primary" (click)="onSetExptRulesClick()" i18n="@@ff.components.details.targeting.setabtestrule">
           <i nz-icon nzType="filter" nzTheme="outline"></i>
-          A/B 测试分流设置
+          Set ab test rule
         </button>
-        <button nz-button nzType="primary" class="save-btn" (click)="onSaveConditionsOld()">
+        <button nz-button nzType="primary" class="save-btn" (click)="onSaveConditionsOld()" i18n="@@ff.components.details.targeting.save">
           <i nz-icon nzType="icons:icon-save"></i>
-          保存设置
+          Save & Update
         </button>
         <button class="more-action" nzType="primary" nz-dropdown [nzDropdownMenu]="menu">
           <i nz-icon nzType="icons:icon-menu"></i>
@@ -17,12 +17,12 @@
         <nz-dropdown-menu #menu="nzDropdownMenu">
           <ul nz-menu style="margin-top: 8px;min-width: 100px;">
             <li *ngIf="approvalRequestEnabled" (click)="onRequestApproval()" nz-menu-item
-                style="text-align: center;display: block;">
-              请求审阅
+                style="text-align: center;display: block;" i18n="@@ff.components.details.targeting.changerequest">
+              Change request
             </li>
             <li nz-menu-item (click)="onFlagScheduler()"
-                style="text-align: center;display: block;">
-              定时发布
+                style="text-align: center;display: block;" i18n="@@ff.components.details.targeting.scheduling">
+              Scheduling
             </li>
           </ul>
         </nz-dropdown-menu>
@@ -31,8 +31,9 @@
     <div class="content-container">
       <div class="standard-div" *ngIf="!isLoading; else loadingTem;">
         <div class="rule-banner">
-          <div class="title">默认规则</div>
-          <i nz-tooltip="如果开关被开启则返回以下结果" nz-icon nzType="icons:icon-info-outline"></i>
+          <div class="title" i18n="@@ff.components.details.targeting.defaultrule">Default rule</div>
+          <i nz-tooltip="If the flag is turned on, the following variation is served" i18n-nz-tooltip="@@ff.components.details.targeting.defaultrule-tooltip"
+             nz-icon nzType="icons:icon-info-outline"></i>
         </div>
         <div class="find-rule">
           <app-serve-multistates [variationOptions]="variationOptions"
@@ -44,13 +45,14 @@
       <div class="standard-div target-users" *ngIf="!isLoading; else loadingTem;">
         <div class="rule-banner">
           <div class="title-wraper">
-            <div class="title">目标用户</div>
+            <div class="title" i18n="@@ff.components.details.targeting.individualtargeting">Individual targeting</div>
             <i *ngIf="targetIndividualsActive" nz-icon (click)="targetIndividualsActive = !targetIndividualsActive"
               nzType="icons:icon-arrow-down"></i>
             <i *ngIf="!targetIndividualsActive" nz-icon (click)="targetIndividualsActive = !targetIndividualsActive"
               nzType="icons:icon-arrow-right"></i>
           </div>
-          <i nz-tooltip="满足规则后将覆盖原有的默认规则" nz-icon nzType="icons:icon-info-outline"></i>
+          <i nz-tooltip="The default rule will be overridden when the rules are met" i18n-nz-tooltip="@@ff.components.details.targeting.coverdefaultrule-tooltip"
+             nz-icon nzType="icons:icon-info-outline"></i>
         </div>
         <div *ngIf="targetIndividualsActive" style="margin-left: -12px;margin-top: 16px">
           <div class="content" *ngFor="let variationOption of variationOptions; let i = index">
@@ -63,8 +65,9 @@
       </div>
       <div class="standard-div" *ngIf="!isLoading; else loadingTem;">
         <div class="rule-banner">
-          <div class="title">自定义规则</div>
-          <i nz-tooltip="满足规则后将覆盖原有的默认规则" nz-icon nzType="icons:icon-info-outline"></i>
+          <div class="title" i18n="@@ff.components.details.targeting.customizedrules">Target users who match these rules</div>
+          <i nz-tooltip="The default rule will be overridden when the rules are met" i18n-nz-tooltip="@@ff.components.details.targeting.coverdefaultrule-tooltip"
+             nz-icon nzType="icons:icon-info-outline"></i>
           <i nz-icon (click)="onAddRule()" nzType="icons:icon-add-outline"></i>
         </div>
         <div class="drop-list" cdkDropList (cdkDropListDropped)="onDragEnd($event)">
@@ -165,7 +168,7 @@ <h3>{{item.category}}</h3>
     <span style="display:inline-box;color:red;margin-right:10px"
       *ngIf="!pendingChanges.hasInstruction()">只有在存在改动的情况下才可<span *ngIf="!isApprovalRequestModal">保存</span><span
         *ngIf="isApprovalRequestModal">提交审阅</span></span>
-    <button nz-button nzType="default" (click)="requestApprovalModalVisible=false">取消</button>
+    <button nz-button nzType="default" (click)="requestApprovalModalVisible=false" i18n="@@common.cancel">Cancel</button>
     <button [disabled]="!pendingChanges.hasInstruction()" *ngIf="!isApprovalRequestModal" nz-button nzType="primary"
       (click)="onSaveConditions()">保存改动</button>
     <button [disabled]="!pendingChanges.canSubmit()" *ngIf="isApprovalRequestModal" nz-button nzType="primary"
diff --git a/modules/front-end/src/app/features/safe/feature-flags/details/targeting/targeting.component.ts b/modules/front-end/src/app/features/safe/feature-flags/details/targeting/targeting.component.ts
index 2a890d221..0b2cb07b9 100644
--- a/modules/front-end/src/app/features/safe/feature-flags/details/targeting/targeting.component.ts
+++ b/modules/front-end/src/app/features/safe/feature-flags/details/targeting/targeting.component.ts
@@ -7,9 +7,9 @@ import { SwitchService } from '@services/switch.service';
 import { CSwitchParams, IFfParams, IFfpParams, IJsonContent, IVariationOption, IRulePercentageRollout, IPrequisiteFeatureFlag, IFftuwmtrParams } from '../../types/switch-new';
 import { PendingChange } from '../../types/pending-changes';
 import { TeamService } from '@services/team.service';
-import { IAccount, IProjectEnv } from '@shared/types';
+import { IOrganization, IProjectEnv } from '@shared/types';
 import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';
-import { CURRENT_ACCOUNT, CURRENT_PROJECT } from "@utils/localstorage-keys";
+import { CURRENT_ORGANIZATION, CURRENT_PROJECT } from "@utils/localstorage-keys";
 import { EnvUserService } from '@services/env-user.service';
 import { IUserProp, IUserType } from '@shared/types';
 import { MessageQueueService } from '@services/message-queue.service';
@@ -44,7 +44,7 @@ export class TargetingComponent implements OnInit {
   public targetIndividualsActive: boolean = false;
 
   public isArchived = false;
-  currentAccount: IAccount = null;
+  currentAccount: IOrganization = null;
   currentProjectEnv: IProjectEnv = null;
 
   approvalRequestEnabled: boolean = false;
@@ -167,7 +167,7 @@ export class TargetingComponent implements OnInit {
     this.switchId = detail.id;
 
     this.currentProjectEnv = JSON.parse(localStorage.getItem(CURRENT_PROJECT()));
-    this.currentAccount = JSON.parse(localStorage.getItem(CURRENT_ACCOUNT()));
+    this.currentAccount = JSON.parse(localStorage.getItem(CURRENT_ORGANIZATION()));
     const currentUrl = this.route.snapshot['_routerState'].url;
     this.pendingChanges = new PendingChange(
       this.teamService,
@@ -310,13 +310,13 @@ export class TargetingComponent implements OnInit {
 
     this.switchServe.updateSwitch(this.featureDetail)
       .subscribe((result) => {
-        this.msg.success("修改成功!");
+        this.msg.success($localize `:@@common.save-success:Saved Successfully`);
         this.loadFeatureFlag(result.data);
         this.requestApprovalModalVisible = false;
         this.messageQueueService.emit(this.messageQueueService.topics.FLAG_TARGETING_CHANGED(this.switchId));
         this.isLoading = false;
       }, _ => {
-        this.msg.error("修改失败!");
+        this.msg.error($localize `:@@common.save-fial:Failed to Save`);
         this.requestApprovalModalVisible = true;
         this.isLoading = false;
       })
diff --git a/modules/front-end/src/app/features/safe/feature-flags/index/index.component.ts b/modules/front-end/src/app/features/safe/feature-flags/index/index.component.ts
index 110be9f78..6df7cd8da 100644
--- a/modules/front-end/src/app/features/safe/feature-flags/index/index.component.ts
+++ b/modules/front-end/src/app/features/safe/feature-flags/index/index.component.ts
@@ -16,7 +16,7 @@ import {
 import { SwitchV2Service } from "@services/switch-v2.service";
 import { debounceTime, first, map, switchMap } from 'rxjs/operators';
 import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms";
-import { getCurrentAccount, getCurrentProjectEnv } from "@utils/project-env";
+import { getCurrentOrganization, getCurrentProjectEnv } from "@utils/project-env";
 import { ProjectService } from "@services/project.service";
 import { IEnvironment } from "@shared/types";
 import { NzNotificationService } from "ng-zorro-antd/notification";
@@ -291,7 +291,7 @@ export class IndexComponent implements OnInit {
     this.$searchV2.next();
 
     // get current envs
-    const curAccountId = getCurrentAccount().id;
+    const curAccountId = getCurrentOrganization().id;
     const curProjectId = currentProjectEnv.projectId;
     const curEnvId = currentProjectEnv.envId;
 
diff --git a/modules/front-end/src/app/features/safe/feature-flags/types/feature-flag-differ.ts b/modules/front-end/src/app/features/safe/feature-flags/types/feature-flag-differ.ts
index 5f4bc85b2..3a869116f 100644
--- a/modules/front-end/src/app/features/safe/feature-flags/types/feature-flag-differ.ts
+++ b/modules/front-end/src/app/features/safe/feature-flags/types/feature-flag-differ.ts
@@ -7,71 +7,71 @@ const normalizeFn = (ff: IFeatureFlag): IFlatFeatureFlag => {
   const result: IFlatFeatureFlag = JSON.parse(JSON.stringify(ff));
 
   result.targetIndividuals = ff.targetIndividuals.map((t: ITargetIndividual) => ({
-      variationId: t.valueOption.variationValue,
-      valueOption: t.valueOption,
-      individuals: t.individuals
+    variationId: t.valueOption.variationValue,
+    valueOption: t.valueOption,
+    individuals: t.individuals
   }));
 
   result.defaultRulePercentageRollouts = ff.ff.defaultRulePercentageRollouts.map(r => ({
-      variationId: r.valueOption.variationValue,
-      valueOption: r.valueOption,
-      rolloutPercentage: `${convertIntervalToPercentage(r.rolloutPercentage)}`,
-      exptRollout: r.exptRollout
+    variationId: r.valueOption.variationValue,
+    valueOption: r.valueOption,
+    rolloutPercentage: `${convertIntervalToPercentage(r.rolloutPercentage)}`,
+    exptRollout: r.exptRollout
   }));
 
   delete result['ff']['defaultRulePercentageRollouts'];
 
 
   result.fftuwmtr = ff.fftuwmtr.map(rule => {
-      const { isIncludedInExpt, ruleId, ruleName } = rule;
-      const result: IFlatRule = { isIncludedInExpt, ruleId, ruleName } as IFlatRule;
-
-      const _rule = JSON.parse(JSON.stringify(rule));
-      _rule.valueOptionsVariationRuleValues = _rule.valueOptionsVariationRuleValues.map(v => ({
-          valueOption: v.valueOption,
-          rolloutPercentage: `${convertIntervalToPercentage(v.rolloutPercentage)}`,
-          exptRollout: v.exptRollout,
-      }));
-
-      _rule.ruleJsonContent = _rule.ruleJsonContent.map(r => {
-        const { operation, property, value } = r;
-        return {
-            operation,
-            property,
-            type: ruleValueConfig.find(r => r.value === operation)?.type,
-            value: isSegmentClause(property) || isMultiValueOperation(operation!) ? JSON.parse(value) : value
-        }
+    const { isIncludedInExpt, ruleId, ruleName } = rule;
+    const result: IFlatRule = { isIncludedInExpt, ruleId, ruleName } as IFlatRule;
+
+    const _rule = JSON.parse(JSON.stringify(rule));
+    _rule.valueOptionsVariationRuleValues = _rule.valueOptionsVariationRuleValues.map(v => ({
+      valueOption: v.valueOption,
+      rolloutPercentage: `${convertIntervalToPercentage(v.rolloutPercentage)}`,
+      exptRollout: v.exptRollout,
+    }));
+
+    _rule.ruleJsonContent = _rule.ruleJsonContent.map(r => {
+      const { operation, property, value } = r;
+      return {
+        operation,
+        property,
+        type: ruleValueConfig.find(r => r.value === operation)?.type,
+        value: isSegmentClause(property) || isMultiValueOperation(operation!) ? JSON.parse(value) : value
+      }
+    });
+
+    result.ruleJsonContent = [rule.ruleJsonContent.reduce((acc, cur) => {
+      const { operation, property, value } = cur;
+      acc['id'] += `${property}_${operation || ''}_${value}}`;
+
+      acc.rule = _rule;
+
+      acc.items.push({
+        operation,
+        property,
+        type: ruleValueConfig.find(r => r.value === operation)?.type,
+        value: isSegmentClause(property) || isMultiValueOperation(operation!) ? JSON.parse(value) : value
       });
 
-      result.ruleJsonContent = [rule.ruleJsonContent.reduce((acc, cur) => {
-          const { operation, property, value } = cur;
-          acc['id'] += `${property}_${operation || ''}_${value}}`;
-
-          acc.rule = _rule;
+      return acc;
+    }, { id: '', items: [] } as IFlatRuleClausesWrapper)];
 
-          acc.items.push({
-              operation,
-              property,
-              type: ruleValueConfig.find(r => r.value === operation)?.type,
-              value: isSegmentClause(property) || isMultiValueOperation(operation!) ? JSON.parse(value) : value
-          });
-
-          return acc;
-      }, {id: '', items: []} as IFlatRuleClausesWrapper)];
-
-      result.valueOptionsVariationRuleValues = [rule.valueOptionsVariationRuleValues.reduce((acc, cur) => {
-          acc.id += `${cur.exptRollout}_${cur.rolloutPercentage}_${cur.valueOption.variationValue}`;
-          acc.rule = _rule;
-          acc.items.push({
-              valueOption: cur.valueOption,
-              rolloutPercentage: `${convertIntervalToPercentage(cur.rolloutPercentage)}`,
-              exptRollout: cur.exptRollout,
-          });
+    result.valueOptionsVariationRuleValues = [rule.valueOptionsVariationRuleValues.reduce((acc, cur) => {
+      acc.id += `${cur.exptRollout}_${cur.rolloutPercentage}_${cur.valueOption.variationValue}`;
+      acc.rule = _rule;
+      acc.items.push({
+        valueOption: cur.valueOption,
+        rolloutPercentage: `${convertIntervalToPercentage(cur.rolloutPercentage)}`,
+        exptRollout: cur.exptRollout,
+      });
 
-          return acc;
-      }, {id: '', items: []} as IFlatVariationOptionsWrapper)];
+      return acc;
+    }, { id: '', items: [] } as IFlatVariationOptionsWrapper)];
 
-      return result
+    return result
   });
 
   return result;
@@ -81,41 +81,41 @@ const deNormalizeFn = (ff: IFlatFeatureFlag): IFeatureFlag => {
   const result = JSON.parse(JSON.stringify(ff));
 
   result.targetIndividuals = ff.targetIndividuals.map((t: IFlatTargetIndividual) => ({
-      valueOption: t.valueOption,
-      individuals: t.individuals
+    valueOption: t.valueOption,
+    individuals: t.individuals
   }));
 
   result.ff.defaultRulePercentageRollouts = ff.defaultRulePercentageRollouts.map((rule: IFlatRuleValue) => {
-      const { exptRollout, rolloutPercentage, valueOption } = rule;
-      return {
-          exptRollout,
-          rolloutPercentage: convertPercentageToInterval(rolloutPercentage),
-          valueOption
-      };
+    const { exptRollout, rolloutPercentage, valueOption } = rule;
+    return {
+      exptRollout,
+      rolloutPercentage: convertPercentageToInterval(rolloutPercentage),
+      valueOption
+    };
   });
 
   delete result['defaultRulePercentageRollouts'];
 
   result.fftuwmtr = ff.fftuwmtr.map((rule: IFlatRule) => {
-      const { isIncludedInExpt, ruleId, ruleName } = rule;
-      const result: IRule = { isIncludedInExpt, ruleId, ruleName } as IRule;
-
-      result.ruleJsonContent = rule.ruleJsonContent[0]?.items?.map(clause => {
-          const { operation, property, value } = clause;
-          return {
-              operation,
-              property,
-              value: isSegmentClause(property) || isMultiValueOperation(operation!) ? JSON.stringify(value) : value as string
-          }
-      });
+    const { isIncludedInExpt, ruleId, ruleName } = rule;
+    const result: IRule = { isIncludedInExpt, ruleId, ruleName } as IRule;
+
+    result.ruleJsonContent = rule.ruleJsonContent[0]?.items?.map(clause => {
+      const { operation, property, value } = clause;
+      return {
+        operation,
+        property,
+        value: isSegmentClause(property) || isMultiValueOperation(operation!) ? JSON.stringify(value) : value as string
+      }
+    });
 
-      result.valueOptionsVariationRuleValues = rule.valueOptionsVariationRuleValues[0]?.items?.map(r => ({
-          valueOption: r.valueOption,
-          rolloutPercentage: convertPercentageToInterval(r.rolloutPercentage),
-          exptRollout: r.exptRollout
-      }));
+    result.valueOptionsVariationRuleValues = rule.valueOptionsVariationRuleValues[0]?.items?.map(r => ({
+      valueOption: r.valueOption,
+      rolloutPercentage: convertPercentageToInterval(r.rolloutPercentage),
+      exptRollout: r.exptRollout
+    }));
 
-      return result
+    return result
   });
 
   return result;
@@ -144,105 +144,105 @@ const translation: Translation = {
 
 const translationConfigs = [
   {
-      order: 1,
-      keyPathPatterns: [['defaultRulePercentageRollouts', '*'], ['defaultRulePercentageRollouts', '*', 'rolloutPercentage']],
-      getContentFunc: function (ops: IReadableChange[], translations: Translation) { // do not use arrow function because we need this
-          const op = ops.filter(op => op.change.type !== Operation.REMOVE).map((op: any) => {
-              const key = op.keyPath[1];
-              const value = getTypeOfObj(op.change.value) === "Object" ? op.change.value.rolloutPercentage : op.change.value;
-              return `${key} (${value}%)`;
-          })
-
-          const opCode = 'SET';
-
-          return generateHtmlFromReadableOp({
-              title: translations[this.code],
-              content: `<div class="serve-values">${translations[opCode]} <div class="serve-value">${op.join('</div><div class="serve-value">')}</div></div>`
-          });
-      },
-      code: 'DEFAULT_VARIATION'
+    order: 1,
+    keyPathPatterns: [['defaultRulePercentageRollouts', '*'], ['defaultRulePercentageRollouts', '*', 'rolloutPercentage']],
+    getContentFunc: function (ops: IReadableChange[], translations: Translation) { // do not use arrow function because we need this
+      const op = ops.filter(op => op.change.type !== Operation.REMOVE).map((op: any) => {
+        const key = op.keyPath[1];
+        const value = getTypeOfObj(op.change.value) === "Object" ? op.change.value.rolloutPercentage : op.change.value;
+        return `${key} (${value}%)`;
+      })
+
+      const opCode = 'SET';
+
+      return generateHtmlFromReadableOp({
+        title: translations[this.code],
+        content: `<div class="serve-values">${translations[opCode]} <div class="serve-value">${op.join('</div><div class="serve-value">')}</div></div>`
+      });
+    },
+    code: 'DEFAULT_VARIATION'
   },
   {
-      order: 2,
-      keyPathPatterns: [
-          ["targetIndividuals", "*", "individuals","*"],
-          ['targetIndividuals', '*', 'individuals', '*', 'name']],
-      getContentFunc: function (ops: IReadableChange[], translations: Translation) { // do not use arrow function because we need this
-
-          const contentArr = ops.map((op: IReadableChange) => {
-              let key: string;
-              switch (op.change.type) {
-                  case Operation.ADD:
-                      key = op.keyPath[1];
-                      return `${translations['TO']} ${key} ${translations['ADD']} ${op.change.value.name}`;
-                  case Operation.REMOVE:
-                      key = op.keyPath[1];
-                      return `${translations['FROM']} ${key} ${translations['REMOVE']} ${op.change.value.name}`;
-                  case Operation.UPDATE:
-                      key = op.keyPath[1];
-                      return `${key} ${translations['IN']} ${translations['RENAME']} ${op.change.oldValue} ${translations['AS']} ${op.change.value}`;
-                  default:
-                      return null;
-              }
-          }).filter(c => c!== null);
-
-          return generateHtmlFromReadableOp({
-              title: translations[this.code],
-              content: contentArr.map((c) => `<div class="ffc-diff-content-item ffc-diff-content-item-individual">${c}</div>`).join('')
-          });
-      },
-      code: 'TARGET_INDIVIDUALS'
+    order: 2,
+    keyPathPatterns: [
+      ["targetIndividuals", "*", "individuals", "*"],
+      ['targetIndividuals', '*', 'individuals', '*', 'name']],
+    getContentFunc: function (ops: IReadableChange[], translations: Translation) { // do not use arrow function because we need this
+
+      const contentArr = ops.map((op: IReadableChange) => {
+        let key: string;
+        switch (op.change.type) {
+          case Operation.ADD:
+            key = op.keyPath[1];
+            return `${translations['TO']} ${key} ${translations['ADD']} ${op.change.value.name}`;
+          case Operation.REMOVE:
+            key = op.keyPath[1];
+            return `${translations['FROM']} ${key} ${translations['REMOVE']} ${op.change.value.name}`;
+          case Operation.UPDATE:
+            key = op.keyPath[1];
+            return `${key} ${translations['IN']} ${translations['RENAME']} ${op.change.oldValue} ${translations['AS']} ${op.change.value}`;
+          default:
+            return null;
+        }
+      }).filter(c => c !== null);
+
+      return generateHtmlFromReadableOp({
+        title: translations[this.code],
+        content: contentArr.map((c) => `<div class="ffc-diff-content-item ffc-diff-content-item-individual">${c}</div>`).join('')
+      });
+    },
+    code: 'TARGET_INDIVIDUALS'
   },
   {
-      order: 3,
-      keyPathPatterns: [
-          ['fftuwmtr', '*'],
-          ['fftuwmtr', '*', 'ruleJsonContent', '*'],
-          ['fftuwmtr', '*', 'valueOptionsVariationRuleValues', '*']
-      ],
-      getContentFunc: function (this: ITranslationConfig, ops: IReadableChange[], translations: Translation) { // do not use arrow function because we need this
-
-          const ruleAddOrRemove = ops.filter(op => isKeyPathExactMatchPattern(op.keyPath, [this.keyPathPatterns[0]])).map((op: IReadableChange) => {
-              const rule = op.change.value;
-              switch (op.change.type) {
-                  case Operation.ADD:
-                      return `<div class="ffc-diff-content-item ffc-diff-content-item-rule">
+    order: 3,
+    keyPathPatterns: [
+      ['fftuwmtr', '*'],
+      ['fftuwmtr', '*', 'ruleJsonContent', '*'],
+      ['fftuwmtr', '*', 'valueOptionsVariationRuleValues', '*']
+    ],
+    getContentFunc: function (this: ITranslationConfig, ops: IReadableChange[], translations: Translation) { // do not use arrow function because we need this
+
+      const ruleAddOrRemove = ops.filter(op => isKeyPathExactMatchPattern(op.keyPath, [this.keyPathPatterns[0]])).map((op: IReadableChange) => {
+        const rule = op.change.value;
+        switch (op.change.type) {
+          case Operation.ADD:
+            return `<div class="ffc-diff-content-item ffc-diff-content-item-rule">
                           <div class="ffc-diff-rule-name">${translations['ADD_RULE']} ${rule.ruleName}</div>
                           <div class="ffc-diff-rule-description">${generateRuleDescription(rule.ruleJsonContent[0].items, rule.valueOptionsVariationRuleValues[0].items, translations)}</div>
                       </div>`;
-                  case Operation.REMOVE:
-                      return `<div class="ffc-diff-content-item ffc-diff-content-item-rule">
+          case Operation.REMOVE:
+            return `<div class="ffc-diff-content-item ffc-diff-content-item-rule">
                           <div class="ffc-diff-rule-name">${translations['REMOVE_RULE']} ${op.change.value.ruleName}</div>
                           <div class="ffc-diff-rule-description">${generateRuleDescription(rule.ruleJsonContent[0].items, rule.valueOptionsVariationRuleValues[0].items, translations)}</div>
                       </div>`;
-                  default:
-                      return null;
-              }
-
-          }).filter(c => c!== null);
-
-          const ruleUpateDict = ops.filter(op => isKeyPathExactMatchPattern(op.keyPath, [this.keyPathPatterns[1], this.keyPathPatterns[2]]))
-                               .filter(op => op.change.type === Operation.ADD).map(op => op)
-                               .reduce((acc, cur) => {
-                                  (acc[cur.keyPath[1]] = acc[cur.keyPath[1]] || []).push(cur);
-                                  return acc;
-                              }, {});
-
-          const ruleUpate = Object.keys(ruleUpateDict).map(ruleId => {
-              const op = ruleUpateDict[ruleId][0];
-              const rule = op.change.value.rule;
-              return `<div class="ffc-diff-content-item ffc-diff-content-item-rule">
+          default:
+            return null;
+        }
+
+      }).filter(c => c !== null);
+
+      const ruleUpateDict = ops.filter(op => isKeyPathExactMatchPattern(op.keyPath, [this.keyPathPatterns[1], this.keyPathPatterns[2]]))
+        .filter(op => op.change.type === Operation.ADD).map(op => op)
+        .reduce((acc, cur) => {
+          (acc[cur.keyPath[1]] = acc[cur.keyPath[1]] || []).push(cur);
+          return acc;
+        }, {});
+
+      const ruleUpate = Object.keys(ruleUpateDict).map(ruleId => {
+        const op = ruleUpateDict[ruleId][0];
+        const rule = op.change.value.rule;
+        return `<div class="ffc-diff-content-item ffc-diff-content-item-rule">
                   <div class="ffc-diff-rule-name">${translations['UPDATE_RULE']} ${rule.ruleName}</div>
                   <div class="ffc-diff-rule-description">${generateRuleDescription(rule.ruleJsonContent, rule.valueOptionsVariationRuleValues, translations)}</div>
               </div>`;
-          });
-
-          return generateHtmlFromReadableOp({
-              title: translations[this.code],
-              content: [...ruleAddOrRemove, ...ruleUpate].join('')
-          });
-      },
-      code: 'RULES'
+      });
+
+      return generateHtmlFromReadableOp({
+        title: translations[this.code],
+        content: [...ruleAddOrRemove, ...ruleUpate].join('')
+      });
+    },
+    code: 'RULES'
   }
 ]
 
@@ -320,22 +320,22 @@ const generateRuleDescription = (ruleJsonContent: IFlatRuleClause[], valueOption
   const serveStr = `<div class="serve-value">${valueOptionsVariationRuleValues.map(v => `${v.valueOption.variationValue} (${v.rolloutPercentage}%)`).join('</div><div class="serve-value">')}</div>`;
 
   const clausesStr = '<div class="ffc-diff-rule-clause">' +
-                      ruleJsonContent.map(clause => {
-                          const clauseType: string = isSegmentClause(clause.property) ? 'multi': ruleValueConfig.filter((rule) => rule.value === clause.operation)[0].type;
-                          const valueStr = !isSingleOperator(clause.type!) ? `<div class="value-item">${clauseType === "multi" ? (clause.value as string[]).join('</span><span class="ant-tag">') : clause.value}</div>` : clause.value;
+    ruleJsonContent.map(clause => {
+      const clauseType: string = isSegmentClause(clause.property) ? 'multi' : ruleValueConfig.filter((rule) => rule.value === clause.operation)[0].type;
+      const valueStr = !isSingleOperator(clause.type!) ? `<div class="value-item">${clauseType === "multi" ? (clause.value as string[]).join('</span><span class="ant-tag">') : clause.value}</div>` : clause.value;
 
-                          return `<div class="condition-keyword">${translations['IF']}</div> ${clause.property} ${clause.operation} ${valueStr}`;
-                       }).join(`</div><div class="condition-keyword">${translations['AND']}</div><div class="ffc-diff-rule-clause">`) +
-                      '</div>';
+      return `<div class="condition-keyword">${translations['IF']}</div> ${clause.property} ${clause.operation} ${valueStr}`;
+    }).join(`</div><div class="condition-keyword">${translations['AND']}</div><div class="ffc-diff-rule-clause">`) +
+    '</div>';
 
   return `<div class="ffc-diff-rule-clauses">${clausesStr}</div><div class="ffc-diff-rule-serve"><div class="condition-keyword">${translations['SERVE']}</div><div class="serve-values">${serveStr}</div></div>`;
 }
 
 const isMultiValueOperation = (op: string): boolean => {
   switch (op) {
-      case 'IsOneOf':
-      case 'NotOneOf':
-          return true;
+    case 'IsOneOf':
+    case 'NotOneOf':
+      return true;
   }
 
   return false;
@@ -416,88 +416,88 @@ interface IFlatRule {
 }
 
 interface IFlatFeatureFlag {
-  targetIndividuals: IFlatTargetIndividual [],
+  targetIndividuals: IFlatTargetIndividual[],
   defaultRulePercentageRollouts: IFlatRuleValue[],
   fftuwmtr: IFlatRule[]
 }
 
 const ruleValueConfig = [
   {
-      label: '为真',
-      value: 'IsTrue',
-      type: '',
-      default: 'IsTrue'
-  },{
-      label: '为假',
-      value: 'IsFalse',
-      type: '',
-      default: 'IsFalse'
-  },{
-      label: '等于',
-      value: 'Equal',
-      type: 'string'
-  },{
-      label: '不等于',
-      value: 'NotEqual',
-      type: 'string',
-      default: ''
-  },{
-      label: '小于',
-      value: 'LessThan',
-      type: 'number',
-      default: ''
-  },{
-      label: '大于',
-      value: 'BiggerThan',
-      type: 'number',
-      default: ''
-  },{
-      label: '小于等于',
-      value: 'LessEqualThan',
-      type: 'number',
-      default: ''
-  },{
-      label: '大于等于',
-      value: 'BiggerEqualThan',
-      type: 'number',
-      default: ''
-  },{
-      label: '属于',
-      value: 'IsOneOf',
-      type: 'multi',
-      default: ''
-  },{
-      label: '不属于',
-      value: 'NotOneOf',
-      type: 'multi',
-      default: ''
-  },{
-      label: '包含',
-      value: 'Contains',
-      type: 'string',
-      default: ''
-  },{
-      label: '不包含',
-      value: 'NotContain',
-      type: 'string',
-      default: ''
-  },{
-      label: '以指定字符串开头',
-      value: 'StartsWith',
-      type: 'string',
-      default: ''
-  },{
-      label: '以指定字符串结尾',
-      value: 'EndsWith',
-      type: 'string',
-      default: ''
-  },{
-    label: '正则匹配',
+    label: $localize`:@@core.components.findrule.operators.istrue:is true`,
+    value: 'IsTrue',
+    type: '',
+    default: 'IsTrue'
+  }, {
+    label: $localize`:@@core.components.findrule.operators.isfalse:is false`,
+    value: 'IsFalse',
+    type: '',
+    default: 'IsFalse'
+  }, {
+    label: $localize`:@@core.components.findrule.operators.equals:equals`,
+    value: 'Equal',
+    type: 'string'
+  }, {
+    label: $localize`:@@core.components.findrule.operators.notequal:not equal`,
+    value: 'NotEqual',
+    type: 'string',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.lessthan:less than`,
+    value: 'LessThan',
+    type: 'number',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.biggerthan:bigger than`,
+    value: 'BiggerThan',
+    type: 'number',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.lessequalthan:less equal than`,
+    value: 'LessEqualThan',
+    type: 'number',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.biggerequalthan:bigger equal than`,
+    value: 'BiggerEqualThan',
+    type: 'number',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.isoneof:is one of`,
+    value: 'IsOneOf',
+    type: 'multi',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.notoneof:not one of`,
+    value: 'NotOneOf',
+    type: 'multi',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.contains:contains`,
+    value: 'Contains',
+    type: 'string',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.notcontain:not contain`,
+    value: 'NotContain',
+    type: 'string',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.startwith:start with`,
+    value: 'StartsWith',
+    type: 'string',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.endswith:ends with`,
+    value: 'EndsWith',
+    type: 'string',
+    default: ''
+  }, {
+    label: $localize`:@@core.components.findrule.operators.matchregex:match regex`,
     value: 'MatchRegex',
     type: 'regex',
     default: ''
-  },{
-    label: '正则不匹配',
+  }, {
+    label: $localize`:@@core.components.findrule.operators.notmatchregex:not match regex`,
     value: 'NotMatchRegex',
     type: 'regex',
     default: ''
diff --git a/modules/front-end/src/app/features/safe/feature-flags/types/switch-new.ts b/modules/front-end/src/app/features/safe/feature-flags/types/switch-new.ts
index 65b3d9c95..f921195ad 100644
--- a/modules/front-end/src/app/features/safe/feature-flags/types/switch-new.ts
+++ b/modules/front-end/src/app/features/safe/feature-flags/types/switch-new.ts
@@ -171,7 +171,7 @@ export class CSwitchParams {
     public addFftuwmtr() {
         this.fftuwmtr.push({
             ruleId: uuidv4(),
-            ruleName: '规则' + (this.fftuwmtr.length + 1),
+            ruleName: ($localize `:@@common.rule:Rule`) + ' ' + (this.fftuwmtr.length + 1),
             ruleJsonContent: [],
             valueOptionsVariationRuleValues: [],
         })
diff --git a/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.html b/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.html
index 616aaf679..6057cd989 100644
--- a/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.html
+++ b/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.html
@@ -1,15 +1,15 @@
-<message *ngIf="readonly" [type]="'warning'" i18n-content="@@iam.policies.details.managed-policies-cannot-be-modified" content="Managed policies cannot be modified"></message>
+<message *ngIf="readonly" [type]="'warning'" i18n-content="@@iam.policies.details.managed-policies-cannot-be-modified" content="System Managed policies cannot be modified"></message>
 <div class="operations">
   <button class="standard-btn copy-btn" nz-button nzType="primary" (click)="copyPolicy()">
     <i nz-icon nzType="icons:icon-copy"></i>
-    <ng-container i18n="@@iam.policies.details.copy-policy">Copy policy</ng-container>
+    <ng-container i18n="@@common.copy">Copy</ng-container>
   </button>
   <button class="standard-btn" nz-button nzType="primary" (click)="saveStatements()">
     <i nz-icon nzType="icons:icon-save"></i>
     <ng-container i18n="@@common.save">Save</ng-container>
   </button>
 </div>
-<div class="policy-editor body-container standard-div" [class]="{ffcmanaged: readonly}">
+<div class="policy-editor body-container standard-div" [class]="{'sys-managed': readonly}">
   <div class="statements-banner">
     <div class="title" i18n="@@common.permissions">Permissions</div>
     <i nz-icon *ngIf="!readonly" (click)="addStatement()" nzType="icons:icon-add-outline"></i>
@@ -22,7 +22,7 @@
             <div class="title" i18n="@@iam.policies.details.resource-type">Resource type</div>
             <div style="display:flex;justify-content: flex-end;">
               <button *ngIf="!readonly" class="action-btn" nz-button nzType="default" nzSize="small"
-                      i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?"
+                      i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it?"
                       nzPopconfirmPlacement="bottomRight"
                       (nzOnConfirm)="removeStatement(statement)">
                 <i nz-icon nzType="icons:icon-delete"></i>
diff --git a/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.less b/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.less
index 114d4aa21..bf39f1d4e 100644
--- a/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.less
+++ b/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.less
@@ -3,7 +3,7 @@
 .policy-editor {
   height: calc(100% - 52px);
 
-  &.ffcmanaged {
+  &.sys-managed {
     height: calc(100% - 116px);
   }
 
diff --git a/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.ts b/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.ts
index e94795e39..3a5733549 100644
--- a/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.ts
+++ b/modules/front-end/src/app/features/safe/iam/components/policy-editor/policy-editor.component.ts
@@ -109,7 +109,7 @@ export class PolicyEditorComponent {
 
   resourcesTypes: ResourceType[] = resourcesTypes;
   statements: PolicyStatementViewModel[] = [];
-  readonly: boolean; // true if FFCManaged
+  readonly: boolean; // true if SysManaged
 
   constructor(
     private router: Router,
@@ -125,7 +125,7 @@ export class PolicyEditorComponent {
   set _(policy: IPolicy) {
     if (policy) {
       this._policy = JSON.parse(JSON.stringify(policy));
-      this.readonly = policy.type === 'FFCManaged';
+      this.readonly = policy.type === 'SysManaged';
       this.statements = policy.statements.map(statement => new PolicyStatementViewModel(statement));
     }
   }
diff --git a/modules/front-end/src/app/features/safe/iam/groups/details/details.component.html b/modules/front-end/src/app/features/safe/iam/groups/details/details.component.html
index a671f1fc6..2e2b89759 100644
--- a/modules/front-end/src/app/features/safe/iam/groups/details/details.component.html
+++ b/modules/front-end/src/app/features/safe/iam/groups/details/details.component.html
@@ -4,17 +4,13 @@
   </div>
   <nz-tabset nzLinkRouter class="tabs-container segment-flag">
     <nz-tab>
-      <a *nzTabLink nz-tab-link [routerLink]="['./team']" queryParamsHandling="preserve">
-        团队
-      </a>
+      <a *nzTabLink nz-tab-link [routerLink]="['./team']" queryParamsHandling="preserve" i18n="@@common.team">Team</a>
       <ng-template nz-tab>
         <groups-team></groups-team>
       </ng-template>
     </nz-tab>
     <nz-tab>
-      <a *nzTabLink nz-tab-link [routerLink]="['./policies']" queryParamsHandling="preserve">
-        策略
-      </a>
+      <a *nzTabLink nz-tab-link [routerLink]="['./policies']" queryParamsHandling="preserve" i18n="@@common.policies">Policies</a>
       <ng-template nz-tab>
         <policies></policies>
       </ng-template>
diff --git a/modules/front-end/src/app/features/safe/iam/groups/details/policies/policies.component.html b/modules/front-end/src/app/features/safe/iam/groups/details/policies/policies.component.html
index 85e66fb6b..dc7fd2b5a 100644
--- a/modules/front-end/src/app/features/safe/iam/groups/details/policies/policies.component.html
+++ b/modules/front-end/src/app/features/safe/iam/groups/details/policies/policies.component.html
@@ -9,9 +9,9 @@
           <i nz-icon nzType="icons:icon-search"></i>
         </ng-template>
       </div>
-      <nz-select [(ngModel)]="filter.getAllPolicies" (ngModelChange)="doSearch(true)" nzPlaceHolder="按状态筛选">
-        <nz-option [nzValue]="true" nzLabel="All policies" i18n-nzLabel="@@iam.groups.details.all-policies"></nz-option>
-        <nz-option [nzValue]="false" nzLabel="Policies binded to current group" i18n-nzLabel="@@iam.groups.details.current-policies"></nz-option>
+      <nz-select class="policy-filter" [(ngModel)]="filter.getAllPolicies" (ngModelChange)="doSearch(true)">
+        <nz-option [nzValue]="true" nzLabel="All" i18n-nzLabel="@@iam.groups.details.all-policies"></nz-option>
+        <nz-option [nzValue]="false" nzLabel="Affected to current group" i18n-nzLabel="@@iam.groups.details.current-policies"></nz-option>
       </nz-select>
     </div>
     <div class="table-wrapper">
@@ -36,7 +36,7 @@
         <tr *ngFor="let item of table.data">
           <td (click)="navigateToPolicyDetail(item.id)">{{item.name}}</td>
           <td>
-            <i *ngIf="item.type === 'FFCManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
+            <i *ngIf="item.type === 'SysManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
             {{item.type | policyType}}
           </td>
           <td>{{item.description}}</td>
diff --git a/modules/front-end/src/app/features/safe/iam/groups/details/policies/policies.component.less b/modules/front-end/src/app/features/safe/iam/groups/details/policies/policies.component.less
index 48a6b8bd0..ac16bb52f 100644
--- a/modules/front-end/src/app/features/safe/iam/groups/details/policies/policies.component.less
+++ b/modules/front-end/src/app/features/safe/iam/groups/details/policies/policies.component.less
@@ -10,40 +10,9 @@
   //height: calc(100% - 52px);
   overflow: auto;
 
-  .policy-list {
-    .action-btns {
-      display: flex;
-      justify-content: flex-end;
-      align-items: center;
-      gap: 20px;
-
-      button {
-        border-radius: 20px;
-        height: 40px;
-        padding-left: 20px;
-        padding-right: 20px;
-      }
-    }
-
-    .search-input {
-      height: 30px;
-      width: 200px;
-    }
-
-    ::ng-deep .table-wrapper .ant-select-selector{
-      height: 28px !important;
-    }
-
+  .table-search-area .policy-filter {
     ::ng-deep .ant-select-selector {
-      border-radius: 32px !important;
-      .ant-select-selection-item {
-        margin-top: 5px !important;
-      }
-    }
-
-    .btn-edit {
-      display: inline-block;
-      margin-right: 20px;
+      width: 220px;
     }
   }
 }
diff --git a/modules/front-end/src/app/features/safe/iam/groups/details/setting/setting.component.html b/modules/front-end/src/app/features/safe/iam/groups/details/setting/setting.component.html
index 5f1d91665..cb20a0619 100644
--- a/modules/front-end/src/app/features/safe/iam/groups/details/setting/setting.component.html
+++ b/modules/front-end/src/app/features/safe/iam/groups/details/setting/setting.component.html
@@ -40,7 +40,7 @@
 
   <div class="block" *ngIf="!isLoading; else loadingTem;" >
     <div class="delete">
-      <button nz-button nzType="default" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?"
+      <button nz-button nzType="default" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it??"
               nzPopconfirmPlacement="bottomRight"
               [nzPopconfirmOverlayStyle]="{minWidth: '240px'}"
               (nzOnConfirm)="deleteGroup()" [nzIcon]="iconTplIamUser">
diff --git a/modules/front-end/src/app/features/safe/iam/groups/details/team/team.component.html b/modules/front-end/src/app/features/safe/iam/groups/details/team/team.component.html
index 65d448fde..5feebfe85 100644
--- a/modules/front-end/src/app/features/safe/iam/groups/details/team/team.component.html
+++ b/modules/front-end/src/app/features/safe/iam/groups/details/team/team.component.html
@@ -2,14 +2,14 @@
   <div class="table-content-area">
     <div class="table-search-area">
       <nz-input-group [nzPrefix]="prefixIconSearch" style="width: 300px">
-        <input class="search-input" nz-input type="text" placeholder="Filter by mobile or Email" i18n-placeholder="@@iam.groups.details.team-filter-placeholder" [(ngModel)]="filter.searchText" (ngModelChange)="doSearch(true)">
+        <input class="search-input" nz-input type="text" placeholder="Filter by Email" i18n-placeholder="@@iam.groups.details.team-filter-placeholder" [(ngModel)]="filter.searchText" (ngModelChange)="doSearch(true)">
       </nz-input-group>
       <ng-template #prefixIconSearch>
         <i nz-icon nzType="icons:icon-search"></i>
       </ng-template>
-      <nz-select [(ngModel)]="filter.getAllMembers" (ngModelChange)="doSearch(true)" nzPlaceHolder="按状态筛选">
-        <nz-option [nzValue]="true" nzLabel="All team members" i18n-nzLabel="@@iam.groups.details.all-members"></nz-option>
-        <nz-option [nzValue]="false" nzLabel="Members included in current group" i18n-nzLabel="@@iam.groups.details.current-members"></nz-option>
+      <nz-select class="team-filter" [(ngModel)]="filter.getAllMembers" (ngModelChange)="doSearch(true)">
+        <nz-option [nzValue]="true" nzLabel="All" i18n-nzLabel="@@iam.groups.details.all-members"></nz-option>
+        <nz-option [nzValue]="false" nzLabel="Contained by current group" i18n-nzLabel="@@iam.groups.details.current-members"></nz-option>
       </nz-select>
     </div>
     <div class="table-wrapper">
diff --git a/modules/front-end/src/app/features/safe/iam/groups/details/team/team.component.less b/modules/front-end/src/app/features/safe/iam/groups/details/team/team.component.less
index 6f8486144..ec3719ed2 100644
--- a/modules/front-end/src/app/features/safe/iam/groups/details/team/team.component.less
+++ b/modules/front-end/src/app/features/safe/iam/groups/details/team/team.component.less
@@ -12,14 +12,9 @@
     margin: 0 24px;
   }
 
-  ::ng-deep .table-wrapper .ant-select-selector{
-    height: 28px !important;
-  }
-
-  ::ng-deep .table-search-area .ant-select-selector {
-    border-radius: 32px !important;
-    .ant-select-selection-item {
-      margin-top: 5px !important;
+  .table-search-area .team-filter {
+    ::ng-deep .ant-select-selector {
+      width: 220px;
     }
   }
 }
diff --git a/modules/front-end/src/app/features/safe/iam/groups/index/index.component.html b/modules/front-end/src/app/features/safe/iam/groups/index/index.component.html
index 222d6fc23..ebcab70a9 100644
--- a/modules/front-end/src/app/features/safe/iam/groups/index/index.component.html
+++ b/modules/front-end/src/app/features/safe/iam/groups/index/index.component.html
@@ -43,7 +43,7 @@
         <td>
           <a class="primary-link-btn" (click)="navigateToDetail(item.id)" i18n="@@common.details">Details</a>
           <nz-divider nzType="vertical"></nz-divider>
-          <a style="color: #717D8A" i18n-nz-popconfirm="@@common.remove-confirm"  nz-popconfirm="Can not be recovered, are you sure to remove it?"
+          <a style="color: #717D8A" i18n-nz-popconfirm="@@common.remove-confirm"  nz-popconfirm="This operation cannot be reverted, are you sure to remove it??"
              nzPopconfirmPlacement="bottomRight"
              [nzPopconfirmOverlayStyle]="{minWidth: '240px'}"
              (nzOnConfirm)="delete(item)" [nzIcon]="iconTplIamUser">
diff --git a/modules/front-end/src/app/features/safe/iam/policies/details/groups/groups.component.html b/modules/front-end/src/app/features/safe/iam/policies/details/groups/groups.component.html
index 0f1d59321..896146dfb 100644
--- a/modules/front-end/src/app/features/safe/iam/policies/details/groups/groups.component.html
+++ b/modules/front-end/src/app/features/safe/iam/policies/details/groups/groups.component.html
@@ -7,9 +7,9 @@
       <ng-template #prefixIconSearch>
         <i nz-icon nzType="icons:icon-search"></i>
       </ng-template>
-      <nz-select [(ngModel)]="filter.getAllGroups" (ngModelChange)="doSearch(true)" nzPlaceHolder="按状态筛选">
-        <nz-option [nzValue]="true" nzLabel="All groups" i18n-nzLabel="@@iam.policies.details.all-groups"></nz-option>
-        <nz-option [nzValue]="false" nzLabel="Groups current policy binded to" i18n-nzLabel="@@iam.policies.details.current-groups"></nz-option>
+      <nz-select class="group-filter" [(ngModel)]="filter.getAllGroups" (ngModelChange)="doSearch(true)">
+        <nz-option [nzValue]="true" nzLabel="All" i18n-nzLabel="@@iam.policies.details.all-groups"></nz-option>
+        <nz-option [nzValue]="false" nzLabel="Groups with current policy" i18n-nzLabel="@@iam.policies.details.current-groups"></nz-option>
       </nz-select>
     </div>
     <div class="table-wrapper">
diff --git a/modules/front-end/src/app/features/safe/iam/policies/details/groups/groups.component.less b/modules/front-end/src/app/features/safe/iam/policies/details/groups/groups.component.less
index 9a8c00108..ca06f7d64 100644
--- a/modules/front-end/src/app/features/safe/iam/policies/details/groups/groups.component.less
+++ b/modules/front-end/src/app/features/safe/iam/policies/details/groups/groups.component.less
@@ -12,14 +12,9 @@
     width: 200px;
   }
 
-  ::ng-deep .table-wrapper .ant-select-selector{
-    height: 28px !important;
-  }
-
-  ::ng-deep .table-search-area .ant-select-selector {
-    border-radius: 32px !important;
-    .ant-select-selection-item {
-      margin-top: 5px !important;
+  .table-search-area .group-filter {
+    ::ng-deep .ant-select-selector {
+      width: 220px;
     }
   }
 }
diff --git a/modules/front-end/src/app/features/safe/iam/policies/details/setting/setting.component.html b/modules/front-end/src/app/features/safe/iam/policies/details/setting/setting.component.html
index 36d9c682c..85843c2e3 100644
--- a/modules/front-end/src/app/features/safe/iam/policies/details/setting/setting.component.html
+++ b/modules/front-end/src/app/features/safe/iam/policies/details/setting/setting.component.html
@@ -32,7 +32,7 @@
     <div class="item">
       <div class="label" i18n="@@common.type">Type</div>
       <div class="value">
-        <i *ngIf="policy.type === 'FFCManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
+        <i *ngIf="policy.type === 'SysManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
         {{policy.type | policyType}}
       </div>
     </div>
@@ -46,9 +46,9 @@
   </div>
 
   <ng-container *ngIf="!isLoading; else loadingTem;">
-    <div class="block"  *ngIf="policy.type !== 'FFCManaged'">
+    <div class="block"  *ngIf="policy.type !== 'SysManaged'">
       <div class="delete">
-        <button nz-button nzType="default" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?"
+        <button nz-button nzType="default" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it??"
                 nzPopconfirmPlacement="bottomRight"
                 [nzPopconfirmOverlayStyle]="{minWidth: '240px'}"
                 (nzOnConfirm)="deletePolicy()" [nzIcon]="iconTpl">
diff --git a/modules/front-end/src/app/features/safe/iam/policies/details/team/team.component.html b/modules/front-end/src/app/features/safe/iam/policies/details/team/team.component.html
index fa6b014f9..dd232d648 100644
--- a/modules/front-end/src/app/features/safe/iam/policies/details/team/team.component.html
+++ b/modules/front-end/src/app/features/safe/iam/policies/details/team/team.component.html
@@ -7,9 +7,9 @@
       <ng-template #prefixIconSearch>
         <i nz-icon nzType="icons:icon-search"></i>
       </ng-template>
-      <nz-select [(ngModel)]="filter.getAllMembers" (ngModelChange)="doSearch(true)" nzPlaceHolder="按状态筛选">
-        <nz-option [nzValue]="true" nzLabel="All team members" i18n-nzLabel="@@iam.policies.details.all-members"></nz-option>
-        <nz-option [nzValue]="false" nzLabel="Members current policy binded to" i18n-nzLabel="@@iam.policies.policies.current-members"></nz-option>
+      <nz-select class="team-filter" [(ngModel)]="filter.getAllMembers" (ngModelChange)="doSearch(true)">
+        <nz-option [nzValue]="true" nzLabel="All" i18n-nzLabel="@@iam.policies.details.all-members"></nz-option>
+        <nz-option [nzValue]="false" nzLabel="Members with current policy" i18n-nzLabel="@@iam.policies.policies.current-members"></nz-option>
       </nz-select>
     </div>
     <div class="table-wrapper">
diff --git a/modules/front-end/src/app/features/safe/iam/policies/details/team/team.component.less b/modules/front-end/src/app/features/safe/iam/policies/details/team/team.component.less
index 9a8c00108..28264074c 100644
--- a/modules/front-end/src/app/features/safe/iam/policies/details/team/team.component.less
+++ b/modules/front-end/src/app/features/safe/iam/policies/details/team/team.component.less
@@ -12,14 +12,9 @@
     width: 200px;
   }
 
-  ::ng-deep .table-wrapper .ant-select-selector{
-    height: 28px !important;
-  }
-
-  ::ng-deep .table-search-area .ant-select-selector {
-    border-radius: 32px !important;
-    .ant-select-selection-item {
-      margin-top: 5px !important;
+  .table-search-area .team-filter {
+    ::ng-deep .ant-select-selector {
+      width: 220px;
     }
   }
 }
diff --git a/modules/front-end/src/app/features/safe/iam/policies/index/index.component.html b/modules/front-end/src/app/features/safe/iam/policies/index/index.component.html
index 78e7bfd8a..c2c829d72 100644
--- a/modules/front-end/src/app/features/safe/iam/policies/index/index.component.html
+++ b/modules/front-end/src/app/features/safe/iam/policies/index/index.component.html
@@ -8,7 +8,7 @@
     </ng-template>
     <button nz-button nzType="primary" (click)="showPolicyDrawer()">
       <i nz-icon nzType="icons:icon-add"></i>
-      <ng-container i18n="@@iam.policies.idx.add">Add</ng-container>
+      <ng-container i18n="@@common.add">Add</ng-container>
     </button>
   </div>
   <div class="table-wrapper">
@@ -37,7 +37,7 @@
       <tr *ngFor="let item of table.data">
         <td (click)="navigateToDetail(item.id)">{{ item.name }}</td>
         <td>
-          <i *ngIf="item.type === 'FFCManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
+          <i *ngIf="item.type === 'SysManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
           {{item.type | policyType}}
         </td>
         <td>{{ item.description }}</td>
@@ -48,7 +48,7 @@
         <td>
           <a class="primary-link-btn" (click)="navigateToDetail(item.id)" i18n="@@common.details">Details</a>
           <nz-divider nzType="vertical"></nz-divider>
-          <a *ngIf="item.type !== 'FFCManaged'" style="color: #717D8A" i18n-nz-popconfirm="@@common.remove-confirm"  nz-popconfirm="Can not be recovered, are you sure to remove it?"
+          <a *ngIf="item.type !== 'SysManaged'" style="color: #717D8A" i18n-nz-popconfirm="@@common.remove-confirm"  nz-popconfirm="This operation cannot be reverted, are you sure to remove it??"
              nzPopconfirmPlacement="bottomRight"
              [nzPopconfirmOverlayStyle]="{minWidth: '240px'}"
              (nzOnConfirm)="delete(item)" [nzIcon]="iconTplIamUser">
diff --git a/modules/front-end/src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html b/modules/front-end/src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html
index c04d858a4..03f6bdf72 100644
--- a/modules/front-end/src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html
+++ b/modules/front-end/src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html
@@ -9,9 +9,9 @@
           <i nz-icon nzType="icons:icon-search"></i>
         </ng-template>
       </div>
-      <nz-select [(ngModel)]="filter.getAllPolicies" (ngModelChange)="doSearch(true)" nzPlaceHolder="按状态筛选">
-        <nz-option [nzValue]="true" nzLabel="All policies" i18n-nzLabel="@@iam.team.details.all-policies"></nz-option>
-        <nz-option [nzValue]="false" nzLabel="Policies binded to current team member" i18n-nzLabel="@@iam.team.details.current-policies"></nz-option>
+      <nz-select class="policy-filter" [(ngModel)]="filter.getAllPolicies" (ngModelChange)="doSearch(true)">
+        <nz-option [nzValue]="true" nzLabel="All" i18n-nzLabel="@@iam.team.details.all-policies"></nz-option>
+        <nz-option [nzValue]="false" nzLabel="Affected to current member" i18n-nzLabel="@@iam.team.details.current-policies"></nz-option>
       </nz-select>
     </div>
     <div class="table-wrapper">
@@ -27,9 +27,9 @@
       >
         <thead>
         <tr>
-          <th i18n="@@iam.team.details.name">Name</th>
-          <th i18n="@@iam.team.details.type">Type</th>
-          <th i18n="@@iam.team.details.description">Description</th>
+          <th i18n="@@common.name">Name</th>
+          <th i18n="@@common.type">Type</th>
+          <th i18n="@@common.description">Description</th>
           <th i18n="@@common.actions">Actions</th>
         </tr>
         </thead>
@@ -37,7 +37,7 @@
         <tr *ngFor="let item of table.data">
           <td (click)="navigateToPolicy(item.id)">{{item.name}}</td>
           <td>
-            <i *ngIf="item.type === 'FFCManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
+            <i *ngIf="item.type === 'SysManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
             {{item.type | policyType}}
           </td>
           <td>{{item.description}}</td>
@@ -47,7 +47,7 @@
             <ng-container *ngIf="item.isMemberPolicy">
               <a style="color: #717D8A"
                  i18n-nz-popconfirm="@@iam.team.details.remove-policy-from"
-                 nz-popconfirm="Are you sure to remove the policy from the member?"
+                 nz-popconfirm="Are you sure to remove the policy from current member?"
                  nzPopconfirmPlacement="bottomRight"
                  [nzPopconfirmOverlayStyle]="{minWidth: '240px'}"
                  (nzOnConfirm)="removePolicyFrom(item.id)" [nzIcon]="iconTplIamUser">
diff --git a/modules/front-end/src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.less b/modules/front-end/src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.less
index acacc9ab3..dc4fe788c 100644
--- a/modules/front-end/src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.less
+++ b/modules/front-end/src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.less
@@ -10,40 +10,9 @@
     margin: 0 24px;
   }
 
-  .policy-list {
-    .action-btns {
-      display: flex;
-      justify-content: flex-end;
-      align-items: center;
-      gap: 20px;
-
-      button {
-        border-radius: 20px;
-        height: 40px;
-        padding-left: 20px;
-        padding-right: 20px;
-      }
-    }
-
-    .search-input {
-      height: 30px;
-      width: 200px;
-    }
-
-    ::ng-deep .table-wrapper .ant-select-selector{
-      height: 28px !important;
-    }
-
+  .table-search-area .policy-filter {
     ::ng-deep .ant-select-selector {
-      border-radius: 32px !important;
-      .ant-select-selection-item {
-        margin-top: 5px !important;
-      }
-    }
-
-    .btn-edit {
-      display: inline-block;
-      margin-right: 20px;
+      width: 220px;
     }
   }
 }
diff --git a/modules/front-end/src/app/features/safe/iam/team/details/groups/groups.component.html b/modules/front-end/src/app/features/safe/iam/team/details/groups/groups.component.html
index 4279d4568..c08dc8804 100644
--- a/modules/front-end/src/app/features/safe/iam/team/details/groups/groups.component.html
+++ b/modules/front-end/src/app/features/safe/iam/team/details/groups/groups.component.html
@@ -7,9 +7,9 @@
       <ng-template #prefixIconSearch>
         <i nz-icon nzType="icons:icon-search"></i>
       </ng-template>
-      <nz-select [(ngModel)]="filter.getAllGroups" (ngModelChange)="doSearch(true)">
-        <nz-option [nzValue]="true" nzLabel="All groups" i18n-nzLabel="@@iam.team.details.all-groups"></nz-option>
-        <nz-option [nzValue]="false" nzLabel="Groups including current team member" i18n-nzLabel="@@iam.team.details.current-groups"></nz-option>
+      <nz-select class="group-filter" [(ngModel)]="filter.getAllGroups" (ngModelChange)="doSearch(true)">
+        <nz-option [nzValue]="true" nzLabel="All" i18n-nzLabel="@@iam.team.details.all-groups"></nz-option>
+        <nz-option [nzValue]="false" nzLabel="Containing current member" i18n-nzLabel="@@iam.team.details.current-groups"></nz-option>
       </nz-select>
     </div>
     <div class="table-wrapper">
diff --git a/modules/front-end/src/app/features/safe/iam/team/details/groups/groups.component.less b/modules/front-end/src/app/features/safe/iam/team/details/groups/groups.component.less
index 6f8486144..ae544e326 100644
--- a/modules/front-end/src/app/features/safe/iam/team/details/groups/groups.component.less
+++ b/modules/front-end/src/app/features/safe/iam/team/details/groups/groups.component.less
@@ -8,19 +8,14 @@
     width: 200px;
   }
 
-  nz-divider {
-    margin: 0 24px;
-  }
-
-  ::ng-deep .table-wrapper .ant-select-selector{
-    height: 28px !important;
+  .table-search-area .group-filter {
+    ::ng-deep .ant-select-selector {
+      width: 220px;
+    }
   }
 
-  ::ng-deep .table-search-area .ant-select-selector {
-    border-radius: 32px !important;
-    .ant-select-selection-item {
-      margin-top: 5px !important;
-    }
+  nz-divider {
+    margin: 0 24px;
   }
 }
 
diff --git a/modules/front-end/src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html b/modules/front-end/src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html
index 7428306b0..82e3fe1e5 100644
--- a/modules/front-end/src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html
+++ b/modules/front-end/src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html
@@ -20,10 +20,10 @@
                 (nzPageIndexChange)="doSearch(false)">
         <thead>
         <tr>
-          <th i18n="@@iam.team.details.name">Name</th>
+          <th i18n="@@common.name">Name</th>
           <th i18n="@@iam.team.details.groups">Groups</th>
-          <th i18n="@@iam.team.details.type">Type</th>
-          <th i18n="@@iam.team.details.description">Description</th>
+          <th i18n="@@common.type">Type</th>
+          <th i18n="@@common.description">Description</th>
           <th i18n="@@common.actions">Actions</th>
         </tr>
         </thead>
@@ -32,7 +32,7 @@
           <td (click)="navigateToPolicy(item.id)">{{item.name}}</td>
           <td>{{item.groupName}}</td>
           <td>
-            <i *ngIf="item.type === 'FFCManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
+            <i *ngIf="item.type === 'SysManaged'" style="color: #28a17d;" nz-icon nzType="star" nzTheme="outline"></i>
             {{item.type | policyType}}
           </td>
           <td>{{item.description}}</td>
diff --git a/modules/front-end/src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.less b/modules/front-end/src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.less
index f92ab5d60..5bb6b7d13 100644
--- a/modules/front-end/src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.less
+++ b/modules/front-end/src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.less
@@ -19,17 +19,6 @@
     width: 200px;
   }
 
-  ::ng-deep .table-wrapper .ant-select-selector{
-    height: 28px !important;
-  }
-
-  ::ng-deep .ant-select-selector {
-    border-radius: 32px !important;
-    .ant-select-selection-item {
-      margin-top: 5px !important;
-    }
-  }
-
   .btn-edit {
     display: inline-block;
     margin-right: 20px;
diff --git a/modules/front-end/src/app/features/safe/iam/team/details/setting/setting.component.html b/modules/front-end/src/app/features/safe/iam/team/details/setting/setting.component.html
index 0cc4a46f5..b01f48d6c 100644
--- a/modules/front-end/src/app/features/safe/iam/team/details/setting/setting.component.html
+++ b/modules/front-end/src/app/features/safe/iam/team/details/setting/setting.component.html
@@ -23,10 +23,6 @@
       <div class="label" i18n="@@common.email">Email</div>
       <div class="value">{{member.email ?? '--'}}</div>
     </div>
-    <div class="item">
-      <div class="label" i18n="@@common.mobile">Mobile</div>
-      <div class="value">{{member.phoneNumber ?? '--'}}</div>
-    </div>
     <div class="item">
       <div class="label" i18n="@@common.rn">Resource name (RN)</div>
       <div class="value">
@@ -39,7 +35,7 @@
   <ng-container *ngIf="!isLoading && canDelete()">
     <div class="block" *ngIf="!isLoading; else loadingTem;" >
       <div class="delete">
-        <button nz-button nzType="default" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?"
+        <button nz-button nzType="default" i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it??"
                 nzPopconfirmPlacement="bottomRight"
                 [nzPopconfirmOverlayStyle]="{minWidth: '240px'}"
                 (nzOnConfirm)="deleteMember()" [nzIcon]="iconTplIamUser">
diff --git a/modules/front-end/src/app/features/safe/iam/team/details/setting/setting.component.ts b/modules/front-end/src/app/features/safe/iam/team/details/setting/setting.component.ts
index 74789a605..06d78770a 100644
--- a/modules/front-end/src/app/features/safe/iam/team/details/setting/setting.component.ts
+++ b/modules/front-end/src/app/features/safe/iam/team/details/setting/setting.component.ts
@@ -41,7 +41,7 @@ export class SettingComponent implements OnInit {
   }
 
   canDelete(): boolean {
-    return this.auth.email !== this.member.email || this.auth.phoneNumber !== this.member.phoneNumber;
+    return this.auth.email !== this.member.email;
   }
 
   deleteMember() {
diff --git a/modules/front-end/src/app/features/safe/iam/team/index/index.component.html b/modules/front-end/src/app/features/safe/iam/team/index/index.component.html
index 405dad136..8e9ae1474 100644
--- a/modules/front-end/src/app/features/safe/iam/team/index/index.component.html
+++ b/modules/front-end/src/app/features/safe/iam/team/index/index.component.html
@@ -1,7 +1,7 @@
 <div class="table-content-area">
   <div class="table-search-area">
     <nz-input-group [nzPrefix]="prefixIconSearch">
-      <input nz-input type="text" placeholder="Filter by mobile or Email" [(ngModel)]="filter.searchText" (ngModelChange)="doSearch()" i18n-placeholder="@@iam.team.idx.searchPlaceholder">
+      <input nz-input type="text" placeholder="Filter by Email" [(ngModel)]="filter.searchText" (ngModelChange)="doSearch()" i18n-placeholder="@@iam.team.idx.searchPlaceholder">
     </nz-input-group>
     <ng-template #prefixIconSearch>
       <i nz-icon nzType="icons:icon-search"></i>
@@ -59,12 +59,15 @@
             <i class="copy-icon" nz-icon nzType="icons:icon-copy" (click)="copyText(item.initialPassword)"></i>
             {{ item.initialPassword }}
           </span>
+          <span *ngIf="!item.initialPassword || item.initialPassword?.length === 0">
+            ******
+          </span>
         </td>
         <td>
           <a class="primary-link-btn" (click)="navigateToDetail(item.id)" i18n="@@common.details">Details</a>
           <ng-container *ngIf="canDelete(item)">
             <nz-divider nzType="vertical"></nz-divider>
-            <a style="color: #717D8A" i18n-nz-popconfirm="@@common.remove-confirm"  nz-popconfirm="Can not be recovered, are you sure to remove it?"
+            <a style="color: #717D8A" i18n-nz-popconfirm="@@common.remove-confirm"  nz-popconfirm="This operation cannot be reverted, are you sure to remove it??"
                nzPopconfirmPlacement="bottomRight"
                [nzPopconfirmOverlayStyle]="{minWidth: '240px'}"
                (nzOnConfirm)="deleteMember(item)" [nzIcon]="iconTplIamUser">
diff --git a/modules/front-end/src/app/features/safe/iam/team/index/index.component.ts b/modules/front-end/src/app/features/safe/iam/team/index/index.component.ts
index 9ec6225f9..2b248a04a 100644
--- a/modules/front-end/src/app/features/safe/iam/team/index/index.component.ts
+++ b/modules/front-end/src/app/features/safe/iam/team/index/index.component.ts
@@ -64,7 +64,7 @@ export class IndexComponent implements OnInit {
   }
 
   canDelete(member: IMember): boolean {
-    return this.auth.email !== member.email || this.auth.phoneNumber !== member.phoneNumber;
+    return this.auth.email !== member.email;
   }
 
   deleteMember(member: IMember) {
diff --git a/modules/front-end/src/app/features/safe/iam/types/member.ts b/modules/front-end/src/app/features/safe/iam/types/member.ts
index 9dc42f426..95e3ffb6e 100644
--- a/modules/front-end/src/app/features/safe/iam/types/member.ts
+++ b/modules/front-end/src/app/features/safe/iam/types/member.ts
@@ -1,10 +1,8 @@
 export interface IMember {
   id: string;
   email: string;
-  phoneNumber: string;
   invitorId: string;
   initialPassword?: string;
-  role: string;
   groups: IMemberGroup[];
   name: string;
   // frontend use only
@@ -63,7 +61,7 @@ export interface IPagedMember {
 }
 
 export function memberRn(member: IMember) {
-  const identity = member.email ?? member.phoneNumber;
+  const identity = member.email;
   return `member/${identity}`;
 }
 
diff --git a/modules/front-end/src/app/features/safe/onboarding/onboarding-routing.module.ts b/modules/front-end/src/app/features/safe/onboarding/onboarding-routing.module.ts
new file mode 100644
index 000000000..2eab516c2
--- /dev/null
+++ b/modules/front-end/src/app/features/safe/onboarding/onboarding-routing.module.ts
@@ -0,0 +1,18 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { OnboardingComponent } from './onboarding.component';
+
+const routes: Routes = [
+  {
+    path: '',
+    component: OnboardingComponent
+  }
+];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule],
+  providers: [
+  ]
+})
+export class OnboardingRoutingModule { }
diff --git a/modules/front-end/src/app/features/safe/onboarding/onboarding.component.html b/modules/front-end/src/app/features/safe/onboarding/onboarding.component.html
new file mode 100644
index 000000000..96dfca9b9
--- /dev/null
+++ b/modules/front-end/src/app/features/safe/onboarding/onboarding.component.html
@@ -0,0 +1,8 @@
+<div class="main-container" [class]="{'menu-extended': menuExtended}">
+  <div class="menu-container">
+    <app-menu [menus]="[{}]" [menuExtended]="menuExtended" [isInitialized]="false" (toggleMenu)="toggleMenu($event)" (logout)="logout()"></app-menu>
+  </div>
+  <section class="right-container main-body">
+    <init-steps></init-steps>
+  </section>
+</div>
diff --git a/modules/front-end/src/app/features/safe/onboarding/onboarding.component.less b/modules/front-end/src/app/features/safe/onboarding/onboarding.component.less
new file mode 100644
index 000000000..f46c7a8d8
--- /dev/null
+++ b/modules/front-end/src/app/features/safe/onboarding/onboarding.component.less
@@ -0,0 +1,9 @@
+@import "src/app/features/safe/safe.component";
+
+section.main-body {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  margin-top: 90px;
+  justify-content: center;
+}
diff --git a/modules/front-end/src/app/features/safe/onboarding/onboarding.component.ts b/modules/front-end/src/app/features/safe/onboarding/onboarding.component.ts
new file mode 100644
index 000000000..ec77ea78c
--- /dev/null
+++ b/modules/front-end/src/app/features/safe/onboarding/onboarding.component.ts
@@ -0,0 +1,35 @@
+import { Component, OnDestroy, OnInit } from '@angular/core';
+import { Subject } from 'rxjs';
+import {IdentityService} from "@services/identity.service";
+import {IAuthProps} from "@shared/types";
+import {getAuth} from "@utils/index";
+
+@Component({
+  selector: 'onboarding',
+  templateUrl: './onboarding.component.html',
+  styleUrls: ['./onboarding.component.less']
+})
+export class OnboardingComponent implements OnInit, OnDestroy {
+  public auth: IAuthProps;
+  private destroy$: Subject<void> = new Subject();
+  public menuExtended: boolean = false;
+
+  toggleMenu(extended: boolean) {
+    this.menuExtended = extended;
+  }
+
+  constructor(private identityService: IdentityService) { }
+
+  ngOnInit(): void {
+    this.auth = getAuth();
+  }
+
+  ngOnDestroy(): void {
+    this.destroy$.next();
+    this.destroy$.complete();
+  }
+
+  async logout() {
+    await this.identityService.doLogoutUser();
+  }
+}
diff --git a/modules/front-end/src/app/features/safe/onboarding/onboarding.module.ts b/modules/front-end/src/app/features/safe/onboarding/onboarding.module.ts
new file mode 100644
index 000000000..29f4611dd
--- /dev/null
+++ b/modules/front-end/src/app/features/safe/onboarding/onboarding.module.ts
@@ -0,0 +1,35 @@
+import { NgModule } from '@angular/core';
+import { OnboardingRoutingModule } from './onboarding-routing.module';
+import { CommonModule } from '@angular/common';
+import { OnboardingComponent } from './onboarding.component';
+import { StepsComponent } from './steps/steps.component';
+import { NzStepsModule } from 'ng-zorro-antd/steps';
+import { NzButtonModule } from 'ng-zorro-antd/button';
+import { NzInputModule } from 'ng-zorro-antd/input';
+import { NzTypographyModule } from 'ng-zorro-antd/typography';
+import { NzDividerModule } from "ng-zorro-antd/divider";
+import { NzIconModule } from "ng-zorro-antd/icon";
+import { NzToolTipModule } from "ng-zorro-antd/tooltip";
+import {CoreModule} from "@core/core.module";
+
+@NgModule({
+  declarations: [
+    OnboardingComponent,
+    StepsComponent
+  ],
+  imports: [
+    CoreModule,
+    CommonModule,
+    NzStepsModule,
+    NzButtonModule,
+    NzInputModule,
+    NzTypographyModule,
+    OnboardingRoutingModule,
+    NzDividerModule,
+    NzIconModule,
+    NzToolTipModule
+  ],
+  providers: [
+  ]
+})
+export class OnboardingModule { }
diff --git a/modules/front-end/src/app/features/safe/onboarding/steps/steps.component.html b/modules/front-end/src/app/features/safe/onboarding/steps/steps.component.html
new file mode 100644
index 000000000..457e9c3c1
--- /dev/null
+++ b/modules/front-end/src/app/features/safe/onboarding/steps/steps.component.html
@@ -0,0 +1,28 @@
+<div class="form-content" style="overflow-y: auto;">
+  <div>
+    <nz-steps [nzCurrent]="currentStep">
+      <nz-step i18n-nzTitle="@@onboarding.create-org-project" nzTitle="Create organization and project"></nz-step>
+    </nz-steps>
+  </div>
+
+  <div id="steps">
+    <div class="step step1" *ngIf="currentStep === 0">
+      <form [formGroup]="step0Form">
+        <div class="info-item">
+          <p nz-typography i18n="@@common.org-name">Organization name</p>
+          <input nz-input placeholder="E.g. Featbit" formControlName="organizationName" />
+        </div>
+        <div class="info-item">
+          <p nz-typography i18n="@@common.project-name">Project name</p>
+          <input nz-input placeholder="E.g. Official website" formControlName="projectName" />
+        </div>
+      </form>
+    </div>
+  </div>
+
+  <div class="steps-action">
+    <button nz-button nzType="primary" [disabled]="!step0Form.valid" (click)="done()">
+      <span i18n="@@common.complete">Complete</span>
+    </button>
+  </div>
+</div>
diff --git a/modules/front-end/src/app/features/safe/onboarding/steps/steps.component.less b/modules/front-end/src/app/features/safe/onboarding/steps/steps.component.less
new file mode 100644
index 000000000..841329ba4
--- /dev/null
+++ b/modules/front-end/src/app/features/safe/onboarding/steps/steps.component.less
@@ -0,0 +1,93 @@
+@import "variables";
+
+.form-content {
+  max-width: 586px;
+  width: 586px;
+  margin-left: auto;
+  margin-right: auto;
+  margin-top: -18px;
+  padding: 36px;
+  background-color: #FAFAFA;
+  border: none;
+  border-radius: 20px;
+
+  .steps-action {
+    margin-top: 36px;
+    text-align: right;
+  }
+
+  button {
+    margin-right: 8px;
+  }
+
+  #steps {
+    margin-top: 50px;
+    display: flex;
+    justify-content: center;
+    width: 100%;
+
+    .step {
+      text-align: center;
+      width: 100%;
+
+      .info-item {
+        margin-bottom: 0px;
+
+        .label {
+          text-align: left;
+          margin-bottom: 0px;
+        }
+
+        p{
+          font-size: 18px;
+        }
+      }
+    }
+  }
+
+  .variations {
+    font-size: 15px;
+    text-align: left;
+
+    p {
+      margin-bottom: 20px;
+    }
+
+    ul {
+      list-style-type: none;
+      padding-left: 0;
+
+      li {
+        margin-bottom: 15px;
+
+        i,
+        span {
+          margin-right: 5px;
+        }
+      }
+    }
+  }
+
+  .submit {
+    width: 88px;
+    letter-spacing: 2px;
+  }
+
+  input {
+    height: 40px;
+    border-radius: 20px;
+    padding-left: 18px;
+    padding-right: 18px;
+    margin-top: 16px;
+    margin-bottom: 26px;
+  }
+
+  button {
+    height: 40px;
+    width: 135px;
+    border-radius: 20px;
+    padding-left: 18px;
+    padding-right: 18px;
+    margin-right: 0px;
+  }
+}
\ No newline at end of file
diff --git a/modules/front-end/src/app/features/safe/onboarding/steps/steps.component.ts b/modules/front-end/src/app/features/safe/onboarding/steps/steps.component.ts
new file mode 100644
index 000000000..8a8a538cd
--- /dev/null
+++ b/modules/front-end/src/app/features/safe/onboarding/steps/steps.component.ts
@@ -0,0 +1,65 @@
+import { Component, OnDestroy } from '@angular/core';
+import { Router } from '@angular/router';
+import { Subject } from 'rxjs';
+import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { NzMessageService } from 'ng-zorro-antd/message';
+import {OrganizationService} from "@services/organization.service";
+
+@Component({
+  selector: 'init-steps',
+  templateUrl: './steps.component.html',
+  styleUrls: ['./steps.component.less']
+})
+export class StepsComponent implements OnDestroy {
+
+  private destroy$: Subject<void> = new Subject();
+  currentStep = 0;
+  currentOrganizationId: number;
+  step0Form: FormGroup;
+
+  constructor(
+    private router: Router,
+    private organizationService: OrganizationService,
+    private msg: NzMessageService,
+    private fb: FormBuilder
+  ) {
+
+    this.step0Form = this.fb.group({
+      organizationName: ['', [Validators.required]],
+      projectName: ['', [Validators.required]]
+    });
+
+    this.organizationService.getCurrentOrganization().subscribe(() => {
+      const { organization } = this.organizationService.getCurrentOrganizationProjectEnv();
+      this.currentOrganizationId = organization.id;
+      this.step0Form.patchValue({
+        organizationName: organization.name
+      });
+    });
+  }
+
+  ngOnDestroy(): void {
+    this.destroy$.next();
+    this.destroy$.complete();
+  }
+
+  pre(): void {
+    this.currentStep -= 1;
+  }
+
+  next(): void {
+    this.currentStep += 1;
+  }
+
+  done(): void {
+    const { organizationName, projectName } = this.step0Form.value;
+
+    this.organizationService.initialize(this.currentOrganizationId, { organizationName, projectName })
+    .subscribe(({ flagKeyName }) => {
+      this.organizationService.setOrganization({ id: this.currentOrganizationId, initialized: true, name: organizationName });
+      this.router.navigateByUrl(`/feature-flags`);
+    }, _ => {
+      this.msg.error($localize `:@@common.operation-failed-try-again:Operation failed, please try again`);
+    })
+  }
+}
diff --git a/modules/front-end/src/app/features/safe/account-settings/account/account.component.html b/modules/front-end/src/app/features/safe/organizations/organization/organization.component.html
similarity index 68%
rename from modules/front-end/src/app/features/safe/account-settings/account/account.component.html
rename to modules/front-end/src/app/features/safe/organizations/organization/organization.component.html
index 2ce26bc30..a70606975 100644
--- a/modules/front-end/src/app/features/safe/account-settings/account/account.component.html
+++ b/modules/front-end/src/app/features/safe/organizations/organization/organization.component.html
@@ -1,6 +1,6 @@
 <div class="standard-div rows">
   <div class="row">
-    <div class="row-title" i18n="@@org.org.orgName">Organization name</div>
+    <div class="row-title" i18n="@@org.org.orgName">Name</div>
     <form class="row-content" nz-form [formGroup]="validateOrgForm" [nzLayout]="'inline'" (ngSubmit)="submitOrgForm()">
       <nz-form-item class="extend">
         <nz-form-control nzErrorTip="Organization name is mandatory!" i18n-nzErrorTip="@@org.org.orgMandatory">
@@ -14,22 +14,22 @@
       </nz-form-item>
       <button nz-button nzType="primary" [nzLoading]="isLoading" [disabled]="!canUpdateOrgName">
         <i nz-icon nzType="icons:icon-sync"></i>
-        <ng-container i18n="@@org.org.updateOrgName">Update organization name</ng-container>
+        <ng-container i18n="@@org.org.updateOrgName">Update</ng-container>
       </button>
     </form>
   </div>
   <div class="row">
     <div class="row-title" i18n="@@org.org.switchorg">Switch organization</div>
     <div class="row-content">
-      <nz-select class="extend" nzShowSearch nzPlaceHolder="Select organization" [(ngModel)]="currentAccount" (ngModelChange)="onAccountChange()" i18n-nzPlaceHolder="@@org.org.selectOrg">
-        <nz-option *ngFor="let account of allAccounts" [nzLabel]="account.organizationName" [nzValue]="account"></nz-option>
+      <nz-select class="extend" nzShowSearch nzPlaceHolder="Select organization" [(ngModel)]="currentOrganization" (ngModelChange)="onAccountChange()" i18n-nzPlaceHolder="@@org.org.selectOrg">
+        <nz-option *ngFor="let account of allOrganizations" [nzLabel]="account.name" [nzValue]="account"></nz-option>
       </nz-select>
       <button class="create-org-btn" nz-button nzType="primary" (click)="onCreateAccountClick()">
         <i nz-icon nzType="icons:icon-add"></i>
-        <ng-container i18n="@@org.org.createOrg">Create organization</ng-container>
+        <ng-container i18n="@@common.add">Add</ng-container>
       </button>
     </div>
   </div>
 </div>
 
-<app-account-drawer [visible]="creatAccountFormVisible" (close)="onCreateAccountClosed($event)"></app-account-drawer>
+<organization-drawer [visible]="creatOrganizationFormVisible" (close)="onCreateAccountClosed($event)"></organization-drawer>
diff --git a/modules/front-end/src/app/features/safe/account-settings/account/account.component.less b/modules/front-end/src/app/features/safe/organizations/organization/organization.component.less
similarity index 100%
rename from modules/front-end/src/app/features/safe/account-settings/account/account.component.less
rename to modules/front-end/src/app/features/safe/organizations/organization/organization.component.less
diff --git a/modules/front-end/src/app/features/safe/account-settings/account/account.component.spec.ts b/modules/front-end/src/app/features/safe/organizations/organization/organization.component.spec.ts
similarity index 59%
rename from modules/front-end/src/app/features/safe/account-settings/account/account.component.spec.ts
rename to modules/front-end/src/app/features/safe/organizations/organization/organization.component.spec.ts
index 2fe0bb32d..e019b27d5 100644
--- a/modules/front-end/src/app/features/safe/account-settings/account/account.component.spec.ts
+++ b/modules/front-end/src/app/features/safe/organizations/organization/organization.component.spec.ts
@@ -1,20 +1,20 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 
-import { AccountComponent } from './account.component';
+import { OrganizationComponent } from './organization.component';
 
 describe('SelfInfoComponent', () => {
-  let component: AccountComponent;
-  let fixture: ComponentFixture<AccountComponent>;
+  let component: OrganizationComponent;
+  let fixture: ComponentFixture<OrganizationComponent>;
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      declarations: [ AccountComponent ]
+      declarations: [ OrganizationComponent ]
     })
     .compileComponents();
   });
 
   beforeEach(() => {
-    fixture = TestBed.createComponent(AccountComponent);
+    fixture = TestBed.createComponent(OrganizationComponent);
     component = fixture.componentInstance;
     fixture.detectChanges();
   });
diff --git a/modules/front-end/src/app/features/safe/account-settings/account/account.component.ts b/modules/front-end/src/app/features/safe/organizations/organization/organization.component.ts
similarity index 54%
rename from modules/front-end/src/app/features/safe/account-settings/account/account.component.ts
rename to modules/front-end/src/app/features/safe/organizations/organization/organization.component.ts
index 2d87bc397..e1c22d197 100644
--- a/modules/front-end/src/app/features/safe/account-settings/account/account.component.ts
+++ b/modules/front-end/src/app/features/safe/organizations/organization/organization.component.ts
@@ -2,33 +2,33 @@ import { Component, OnInit } from '@angular/core';
 import { FormControl, FormGroup, Validators } from '@angular/forms';
 import { NzMessageService } from 'ng-zorro-antd/message';
 import { getAuth } from '@utils/index';
-import { IAccount } from '@shared/types';
-import { AccountService } from '@services/account.service';
-import { getCurrentAccount, getCurrentProjectEnv } from "@utils/project-env";
+import { IOrganization } from '@shared/types';
+import { OrganizationService } from '@services/organization.service';
+import { getCurrentOrganization } from "@utils/project-env";
 import {PermissionsService} from "@services/permissions.service";
 import {generalResourceRNPattern, permissionActions} from "@shared/permissions";
 
 @Component({
-  selector: 'app-account',
-  templateUrl: './account.component.html',
-  styleUrls: ['./account.component.less']
+  selector: 'organization',
+  templateUrl: './organization.component.html',
+  styleUrls: ['./organization.component.less']
 })
-export class AccountComponent implements OnInit {
+export class OrganizationComponent implements OnInit {
 
-  creatAccountFormVisible: boolean = false;
+  creatOrganizationFormVisible: boolean = false;
 
   validateOrgForm!: FormGroup;
 
   auth = getAuth();
-  currentAccount: IAccount;
-  allAccounts: IAccount[];
+  currentOrganization: IOrganization;
+  allOrganizations: IOrganization[];
 
   canUpdateOrgName: boolean = false;
 
   isLoading: boolean = false;
 
   constructor(
-    private accountService: AccountService,
+    private organizationService: OrganizationService,
     private message: NzMessageService,
     private permissionsService: PermissionsService
   ) {
@@ -36,34 +36,34 @@ export class AccountComponent implements OnInit {
 
   ngOnInit(): void {
     this.canUpdateOrgName = this.permissionsService.canTakeAction(generalResourceRNPattern.account, permissionActions.UpdateOrgName);
-    this.allAccounts = this.accountService.accounts;
+    this.allOrganizations = this.organizationService.organizations;
 
-    const currentAccountId = getCurrentAccount().id;
-    this.currentAccount = this.allAccounts.find(x => x.id == currentAccountId);
+    const currentOrganizationId = getCurrentOrganization().id;
+    this.currentOrganization = this.allOrganizations.find(x => x.id == currentOrganizationId);
 
     this.initOrgForm();
   }
 
   initOrgForm() {
     this.validateOrgForm = new FormGroup({
-      organizationName: new FormControl(this.currentAccount.organizationName, [Validators.required]),
+      organizationName: new FormControl(this.currentOrganization.name, [Validators.required]),
     });
   }
 
   onCreateAccountClick() {
-    this.creatAccountFormVisible = true;
+    this.creatOrganizationFormVisible = true;
   }
 
-  onCreateAccountClosed(account: IAccount) {
-    this.creatAccountFormVisible = false;
+  onCreateAccountClosed(account: IOrganization) {
+    this.creatOrganizationFormVisible = false;
     if (account) {
-      this.accountService.accounts = [...this.accountService.accounts, account];
-      this.accountService.changeAccount(account);
+      this.organizationService.organizations = [...this.organizationService.organizations, account];
+      this.organizationService.switchOrganization(account);
     }
   }
 
   onAccountChange() {
-    this.accountService.changeAccount(this.currentAccount);
+    this.organizationService.switchOrganization(this.currentOrganization);
   }
 
   submitOrgForm() {
@@ -80,16 +80,16 @@ export class AccountComponent implements OnInit {
       return;
     }
     const { organizationName } = this.validateOrgForm.value;
-    const { id, initialized } = this.currentAccount;
+    const { id, initialized } = this.currentOrganization;
 
     this.isLoading = true;
-    this.accountService.putUpdateAccount({ organizationName, id })
+    this.organizationService.updateOrganization({ organizationName, id })
       .pipe()
       .subscribe(
         () => {
           this.isLoading = false;
           this.message.success($localize `:@@org.org.orgNameUpdateSuccess:Organization name updated!`);
-          this.accountService.setAccount({ id, initialized, organizationName });
+          this.organizationService.setOrganization({ id, initialized, name: organizationName });
         },
         () => {
           this.isLoading = false;
diff --git a/modules/front-end/src/app/features/safe/account-settings/account-settings-routing.module.ts b/modules/front-end/src/app/features/safe/organizations/organizations-routing.module.ts
similarity index 68%
rename from modules/front-end/src/app/features/safe/account-settings/account-settings-routing.module.ts
rename to modules/front-end/src/app/features/safe/organizations/organizations-routing.module.ts
index cc43992f9..ff01241da 100644
--- a/modules/front-end/src/app/features/safe/account-settings/account-settings-routing.module.ts
+++ b/modules/front-end/src/app/features/safe/organizations/organizations-routing.module.ts
@@ -1,18 +1,18 @@
 import { NgModule } from '@angular/core';
 import { RouterModule, Routes } from '@angular/router';
-import { AccountSettingsComponent } from './account-settings.component';
-import { AccountComponent } from './account/account.component';
+import { OrganizationsComponent } from './organizations.component';
+import { OrganizationComponent  } from './organization/organization.component';
 import { ProfileComponent } from './profile/profile.component';
 import { ProjectComponent } from './project/project.component';
 
 const routes: Routes = [
   {
     path: '',
-    component: AccountSettingsComponent,
+    component: OrganizationsComponent,
     children: [
       {
-        path: 'org',
-        component: AccountComponent
+        path: '',
+        component: OrganizationComponent
       }, {
         path: 'projects',
         component: ProjectComponent,
@@ -32,4 +32,4 @@ const routes: Routes = [
   imports: [RouterModule.forChild(routes)],
   exports: [RouterModule]
 })
-export class AccountSettingsRoutingModule { }
+export class OrganizationsRoutingModule { }
diff --git a/modules/front-end/src/app/features/safe/account-settings/account-settings.component.html b/modules/front-end/src/app/features/safe/organizations/organizations.component.html
similarity index 94%
rename from modules/front-end/src/app/features/safe/account-settings/account-settings.component.html
rename to modules/front-end/src/app/features/safe/organizations/organizations.component.html
index 13d17ff49..45b67890d 100644
--- a/modules/front-end/src/app/features/safe/account-settings/account-settings.component.html
+++ b/modules/front-end/src/app/features/safe/organizations/organizations.component.html
@@ -3,7 +3,7 @@
     <nz-tab>
       <a *nzTabLink nz-tab-link [routerLink]="['.']" i18n="@@org.org.tabtitle">Organization</a>
       <ng-template nz-tab>
-        <app-account></app-account>
+        <organization></organization>
       </ng-template>
     </nz-tab>
 
diff --git a/modules/front-end/src/app/features/safe/account-settings/account-settings.component.less b/modules/front-end/src/app/features/safe/organizations/organizations.component.less
similarity index 100%
rename from modules/front-end/src/app/features/safe/account-settings/account-settings.component.less
rename to modules/front-end/src/app/features/safe/organizations/organizations.component.less
diff --git a/modules/front-end/src/app/features/safe/account-settings/account-settings.component.spec.ts b/modules/front-end/src/app/features/safe/organizations/organizations.component.spec.ts
similarity index 58%
rename from modules/front-end/src/app/features/safe/account-settings/account-settings.component.spec.ts
rename to modules/front-end/src/app/features/safe/organizations/organizations.component.spec.ts
index 861b8ded1..c1f0b6da8 100644
--- a/modules/front-end/src/app/features/safe/account-settings/account-settings.component.spec.ts
+++ b/modules/front-end/src/app/features/safe/organizations/organizations.component.spec.ts
@@ -1,20 +1,20 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 
-import { AccountSettingsComponent } from './account-settings.component';
+import { OrganizationsComponent } from './organizations.component';
 
 describe('AccountSettingsComponent', () => {
-  let component: AccountSettingsComponent;
-  let fixture: ComponentFixture<AccountSettingsComponent>;
+  let component: OrganizationsComponent;
+  let fixture: ComponentFixture<OrganizationsComponent>;
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      declarations: [ AccountSettingsComponent ]
+      declarations: [ OrganizationsComponent ]
     })
     .compileComponents();
   });
 
   beforeEach(() => {
-    fixture = TestBed.createComponent(AccountSettingsComponent);
+    fixture = TestBed.createComponent(OrganizationsComponent);
     component = fixture.componentInstance;
     fixture.detectChanges();
   });
diff --git a/modules/front-end/src/app/features/safe/organizations/organizations.component.ts b/modules/front-end/src/app/features/safe/organizations/organizations.component.ts
new file mode 100644
index 000000000..5dc3c9ef9
--- /dev/null
+++ b/modules/front-end/src/app/features/safe/organizations/organizations.component.ts
@@ -0,0 +1,16 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-account-manage',
+  templateUrl: './organizations.component.html',
+  styleUrls: ['./organizations.component.less']
+})
+export class OrganizationsComponent implements OnInit {
+
+  constructor(
+  ) {
+  }
+
+  ngOnInit(): void {
+  }
+}
diff --git a/modules/front-end/src/app/features/safe/account-settings/account-settings.module.ts b/modules/front-end/src/app/features/safe/organizations/organizations.module.ts
similarity index 85%
rename from modules/front-end/src/app/features/safe/account-settings/account-settings.module.ts
rename to modules/front-end/src/app/features/safe/organizations/organizations.module.ts
index a348b27fc..535e4dab8 100644
--- a/modules/front-end/src/app/features/safe/account-settings/account-settings.module.ts
+++ b/modules/front-end/src/app/features/safe/organizations/organizations.module.ts
@@ -1,11 +1,11 @@
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
 
-import { AccountSettingsRoutingModule } from './account-settings-routing.module';
-import { AccountSettingsComponent } from './account-settings.component';
+import { OrganizationsRoutingModule } from './organizations-routing.module';
+import { OrganizationsComponent } from './organizations.component';
 import { NzTabsModule } from 'ng-zorro-antd/tabs';
 import { ProfileComponent } from './profile/profile.component';
-import { AccountComponent } from './account/account.component';
+import { OrganizationComponent } from './organization/organization.component';
 import { ProjectComponent } from './project/project.component';
 import { NzFormModule } from 'ng-zorro-antd/form';
 import { NzTypographyModule } from 'ng-zorro-antd/typography';
@@ -32,8 +32,8 @@ import {CoreModule} from "@core/core.module";
 
 @NgModule({
   declarations: [
-    AccountSettingsComponent,
-    AccountComponent,
+    OrganizationsComponent,
+    OrganizationComponent,
     ProfileComponent,
     ProjectComponent,
     ProjectFilterPipe
@@ -63,8 +63,8 @@ import {CoreModule} from "@core/core.module";
     NzTagModule,
     ScrollingModule,
     ReactiveFormsModule,
-    AccountSettingsRoutingModule,
+    OrganizationsRoutingModule,
     CoreModule
   ]
 })
-export class AccountSettingsModule { }
+export class OrganizationsModule { }
diff --git a/modules/front-end/src/app/features/safe/account-settings/profile/profile.component.html b/modules/front-end/src/app/features/safe/organizations/profile/profile.component.html
similarity index 61%
rename from modules/front-end/src/app/features/safe/account-settings/profile/profile.component.html
rename to modules/front-end/src/app/features/safe/organizations/profile/profile.component.html
index c91ad6b73..237965342 100644
--- a/modules/front-end/src/app/features/safe/account-settings/profile/profile.component.html
+++ b/modules/front-end/src/app/features/safe/organizations/profile/profile.component.html
@@ -11,18 +11,6 @@
         </ng-template>
       </nz-form-control>
     </nz-form-item>
-    <nz-form-item>
-      <label for="phoneNumber" i18n="@@org.profile.mobile">Mobile</label>
-      <nz-form-control nzErrorTip="Mobile is mandatory!" i18n-nzErrorTip="@@org.profile.mobileMandatory">
-        <nz-input-group [nzPrefix]="phonePrefix">
-          <input id="phoneNumber" type="text" nz-input formControlName="phoneNumber" placeholder="Mobile" i18n-placeholder="@@org.profile.mobilePlaceholder"/>
-        </nz-input-group>
-        <ng-template #phonePrefix>
-          <i nz-icon nzType="icons:icon-phone"></i>
-        </ng-template>
-      </nz-form-control>
-    </nz-form-item>
-
     <button class="submit-btn" nz-button [nzType]="'primary'" [nzLoading]="isLoading">
       <i nz-icon nzType="icons:icon-sync"></i>
       <ng-container i18n="@@org.profile.save">Save</ng-container>
diff --git a/modules/front-end/src/app/features/safe/account-settings/profile/profile.component.less b/modules/front-end/src/app/features/safe/organizations/profile/profile.component.less
similarity index 100%
rename from modules/front-end/src/app/features/safe/account-settings/profile/profile.component.less
rename to modules/front-end/src/app/features/safe/organizations/profile/profile.component.less
diff --git a/modules/front-end/src/app/features/safe/account-settings/profile/profile.component.spec.ts b/modules/front-end/src/app/features/safe/organizations/profile/profile.component.spec.ts
similarity index 100%
rename from modules/front-end/src/app/features/safe/account-settings/profile/profile.component.spec.ts
rename to modules/front-end/src/app/features/safe/organizations/profile/profile.component.spec.ts
diff --git a/modules/front-end/src/app/features/safe/account-settings/profile/profile.component.ts b/modules/front-end/src/app/features/safe/organizations/profile/profile.component.ts
similarity index 88%
rename from modules/front-end/src/app/features/safe/account-settings/profile/profile.component.ts
rename to modules/front-end/src/app/features/safe/organizations/profile/profile.component.ts
index 28b5f420c..ab6ad89b2 100644
--- a/modules/front-end/src/app/features/safe/account-settings/profile/profile.component.ts
+++ b/modules/front-end/src/app/features/safe/organizations/profile/profile.component.ts
@@ -23,8 +23,7 @@ export class ProfileComponent {
     private fb: FormBuilder
   ) {
     this.profileForm = this.fb.group({
-      email: [this.auth.email ?? $localize `:@@org.profile.notProvided:Not provided`, [Validators.required, Validators.email]],
-      phoneNumber: [this.auth.phoneNumber ?? $localize `:@@org.profile.notProvided:Not provided`, [Validators.required]],
+      email: [this.auth.email ?? $localize `:@@org.profile.notProvided:Not provided`, [Validators.required, Validators.email]]
     });
   }
 
diff --git a/modules/front-end/src/app/features/safe/account-settings/project/project-filter.pipe.ts b/modules/front-end/src/app/features/safe/organizations/project/project-filter.pipe.ts
similarity index 100%
rename from modules/front-end/src/app/features/safe/account-settings/project/project-filter.pipe.ts
rename to modules/front-end/src/app/features/safe/organizations/project/project-filter.pipe.ts
diff --git a/modules/front-end/src/app/features/safe/account-settings/project/project.component.html b/modules/front-end/src/app/features/safe/organizations/project/project.component.html
similarity index 91%
rename from modules/front-end/src/app/features/safe/account-settings/project/project.component.html
rename to modules/front-end/src/app/features/safe/organizations/project/project.component.html
index d79c27925..c472a9021 100644
--- a/modules/front-end/src/app/features/safe/account-settings/project/project.component.html
+++ b/modules/front-end/src/app/features/safe/organizations/project/project.component.html
@@ -9,7 +9,7 @@
       </nz-input-group>
       <button class="standard-btn" nz-button nzType="primary" permission-check [rn]="generalResourceRNPattern.project" [action]="permissionActions.CreateProject" (actionIfAllow)="onCreateProjectClick()">
         <i nz-icon nzType="icons:icon-add"></i>
-        <ng-container i18n="@@org.project.addProject">Add project</ng-container>
+        <ng-container i18n="@@common.add">Add</ng-container>
       </button>
     </div>
     <div class="project-list">
@@ -44,17 +44,15 @@
                     </div>
                   </div>
                   <div class="env-operations">
-                    <a
-                       permission-check [rn]="getEnvRN(project, env)" [action]="permissionActions.UpdateEnvInfo" (actionIfAllow)="onEditEnvClick(project, env)"
-                    >
+                    <a permission-check [rn]="getEnvRN(project, env)" [action]="permissionActions.UpdateEnvInfo" (actionIfAllow)="onEditEnvClick(project, env)">
                       <span style="color: #23AD7F;" i18n="@@org.project.edit">Edit</span>
                     </a>
                     <ng-container *ngIf="isEnvDeleteBtnVisible(env)">
                       <nz-divider nzType="vertical"></nz-divider>
-                      <a i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="Can not be recovered, are you sure to remove it?"
+                      <a i18n-nz-popconfirm="@@common.remove-confirm" nz-popconfirm="This operation cannot be reverted, are you sure to remove it?"
                          nzPopconfirmPlacement="bottomRight"
                          (nzOnConfirm)="onDeleteEnvClick(project, env)" [nzIcon]="iconTplEnv">
-                        <span style="color: #717D8A" i18n="@@org.project.remove">Remove</span>
+                        <span style="color: #717D8A" i18n="@@common.remove">Remove</span>
                       </a>
                     </ng-container>
                     <ng-template #iconTplEnv>
@@ -74,11 +72,11 @@
           <button class="action-btn" nz-button nzType="default" nzSize="small"
                   *ngIf="currentProjectEnv?.projectId !== project.id"
                   i18n-nz-popconfirm="@@common.remove-confirm"
-                  nz-popconfirm="Can not be recovered, are you sure to remove it?"
+                  nz-popconfirm="This operation cannot be reverted, are you sure to remove it??"
                   nzPopconfirmPlacement="bottomRight"
                   (nzOnConfirm)="onDeleteProjectClick(project)">
             <i nz-icon nzType="icons:icon-delete"></i>
-            <ng-container i18n="@@org.project.remove">Remove</ng-container>
+            <ng-container i18n="@@common.remove">Remove</ng-container>
           </button>
           <button class="action-btn" nz-button nzType="default" nzSize="small"
                   permission-check [rn]="permissionsService.getResourceRN('project', project)" [action]="permissionActions.CreateEnv" (actionIfAllow)="onCreateEnvClick(project)"
diff --git a/modules/front-end/src/app/features/safe/account-settings/project/project.component.less b/modules/front-end/src/app/features/safe/organizations/project/project.component.less
similarity index 96%
rename from modules/front-end/src/app/features/safe/account-settings/project/project.component.less
rename to modules/front-end/src/app/features/safe/organizations/project/project.component.less
index efbed6136..e57e7311a 100644
--- a/modules/front-end/src/app/features/safe/account-settings/project/project.component.less
+++ b/modules/front-end/src/app/features/safe/organizations/project/project.component.less
@@ -98,6 +98,8 @@
           line-height: 150%;
           min-width: 133px;
           align-self: center;
+          display: flex;
+          justify-content: flex-end;
         }
       }
     }
diff --git a/modules/front-end/src/app/features/safe/account-settings/project/project.component.spec.ts b/modules/front-end/src/app/features/safe/organizations/project/project.component.spec.ts
similarity index 100%
rename from modules/front-end/src/app/features/safe/account-settings/project/project.component.spec.ts
rename to modules/front-end/src/app/features/safe/organizations/project/project.component.spec.ts
diff --git a/modules/front-end/src/app/features/safe/account-settings/project/project.component.ts b/modules/front-end/src/app/features/safe/organizations/project/project.component.ts
similarity index 96%
rename from modules/front-end/src/app/features/safe/account-settings/project/project.component.ts
rename to modules/front-end/src/app/features/safe/organizations/project/project.component.ts
index 3cd44f070..1c398fc30 100644
--- a/modules/front-end/src/app/features/safe/account-settings/project/project.component.ts
+++ b/modules/front-end/src/app/features/safe/organizations/project/project.component.ts
@@ -1,7 +1,7 @@
 import { Component, OnInit} from '@angular/core';
 import { IProject, IEnvironment, IProjectEnv } from '@shared/types';
 import { ProjectService } from '@services/project.service';
-import { AccountService } from '@services/account.service';
+import { OrganizationService } from '@services/organization.service';
 import { EnvService } from '@services/env.service';
 import { NzMessageService } from "ng-zorro-antd/message";
 import {PermissionsService} from "@services/permissions.service";
@@ -35,15 +35,15 @@ export class ProjectComponent implements OnInit {
 
   constructor(
     private projectService: ProjectService,
-    private accountService: AccountService,
+    private accountService: OrganizationService,
     private envService: EnvService,
     private messageService: NzMessageService,
     public permissionsService: PermissionsService
   ) {}
 
   ngOnInit(): void {
-    const currentAccountProjectEnv = this.accountService.getCurrentAccountProjectEnv();
-    this.currentAccountId = currentAccountProjectEnv.account.id;
+    const currentAccountProjectEnv = this.accountService.getCurrentOrganizationProjectEnv();
+    this.currentAccountId = currentAccountProjectEnv.organization.id;
     this.currentProjectEnv = currentAccountProjectEnv.projectEnv;
     const canListProjects = this.permissionsService.canTakeAction(generalResourceRNPattern.project, permissionActions.ListProjects);
     if (canListProjects) {
diff --git a/modules/front-end/src/app/features/safe/safe-routing.module.ts b/modules/front-end/src/app/features/safe/safe-routing.module.ts
index 712ee5dac..440adc689 100644
--- a/modules/front-end/src/app/features/safe/safe-routing.module.ts
+++ b/modules/front-end/src/app/features/safe/safe-routing.module.ts
@@ -48,8 +48,8 @@ const routes: Routes = [
         },
       },
       {
-        path: 'account-settings',
-        loadChildren: () => import("./account-settings/account-settings.module").then(m => m.AccountSettingsModule),
+        path: 'organizations',
+        loadChildren: () => import("./organizations/organizations.module").then(m => m.OrganizationsModule),
         data: {
           breadcrumb: $localize `:@@organization:Organization`
         },
diff --git a/modules/front-end/src/app/features/safe/safe.component.ts b/modules/front-end/src/app/features/safe/safe.component.ts
index 59aa10114..1aa32129a 100644
--- a/modules/front-end/src/app/features/safe/safe.component.ts
+++ b/modules/front-end/src/app/features/safe/safe.component.ts
@@ -3,7 +3,7 @@ import { Subject } from 'rxjs';
 import { IAuthProps } from '@shared/types';
 import { IMenuItem } from '@core/components/menu/menu';
 import { getAuth } from '@shared/utils';
-import { UserService } from "@services/user.service";
+import {IdentityService} from "@services/identity.service";
 
 @Component({
   selector: 'app-safe',
@@ -19,7 +19,7 @@ export class SafeComponent implements OnInit, OnDestroy {
   private destory$: Subject<void> = new Subject();
 
   constructor(
-    private userService: UserService,
+    private identityService: IdentityService,
   ) {
     this.setMenus();
   }
@@ -73,9 +73,9 @@ export class SafeComponent implements OnInit, OnDestroy {
         line: true
       },
       {
-        title: $localize `:@@menu.organization:Orgnization`,
+        title: $localize `:@@menu.organization:Organization`,
         icon: 'icons:icon-org',
-        path: '/account-settings'
+        path: '/organizations'
       },
       {
         title: $localize `:@@menu.iam:IAM`,
@@ -104,6 +104,6 @@ export class SafeComponent implements OnInit, OnDestroy {
 
 
   public async logout() {
-    await this.userService.doLogoutUser();
+    await this.identityService.doLogoutUser();
   }
 }
diff --git a/modules/front-end/src/app/features/safe/segments/details/targeting/targeting.component.less b/modules/front-end/src/app/features/safe/segments/details/targeting/targeting.component.less
index 8df3cafac..4024c4386 100644
--- a/modules/front-end/src/app/features/safe/segments/details/targeting/targeting.component.less
+++ b/modules/front-end/src/app/features/safe/segments/details/targeting/targeting.component.less
@@ -33,7 +33,7 @@
 
       .references {
         height: 35px;
-        width: 220px;
+        width: 280px;
         text-align: center;
         border: 1px solid @grey20-color;
         line-height: 35px;
diff --git a/modules/front-end/src/app/features/safe/segments/index/index.component.html b/modules/front-end/src/app/features/safe/segments/index/index.component.html
index 090ece760..1ab95dcbf 100644
--- a/modules/front-end/src/app/features/safe/segments/index/index.component.html
+++ b/modules/front-end/src/app/features/safe/segments/index/index.component.html
@@ -117,7 +117,7 @@
   </ng-template>
 
   <ng-template #deleteModalFooter>
-    <button nz-button nzType="default" (click)="this.closeDeleteModal()" i18n="@@common.cancel">取消</button>
+    <button nz-button nzType="default" (click)="this.closeDeleteModal()" i18n="@@common.cancel">Cancel</button>
     <button nz-button nzType="primary" [nzLoading]="this.deleting"
       [disabled]="currentDeletingSegmentFlagReferences.length > 0"
       (click)="delete(currentDeletingSegment.id)" i18n="@@common.remove">Remove</button>
diff --git a/modules/front-end/src/app/features/safe/segments/types/segments-index.ts b/modules/front-end/src/app/features/safe/segments/types/segments-index.ts
index f52646662..6c08ce05a 100644
--- a/modules/front-end/src/app/features/safe/segments/types/segments-index.ts
+++ b/modules/front-end/src/app/features/safe/segments/types/segments-index.ts
@@ -88,7 +88,7 @@ export class Segment {
   newRule() {
     this.rules.push({
       ruleId: uuidv4(),
-      ruleName: '规则' + (this.rules.length + 1),
+      ruleName: ($localize `:@@common.rule:Rule`) + ' ' + (this.rules.length + 1),
       ruleJsonContent: [],
       valueOptionsVariationRuleValues: [
         {
diff --git a/modules/front-end/src/app/features/safe/switch-archive/switch-archive.component.ts b/modules/front-end/src/app/features/safe/switch-archive/switch-archive.component.ts
index 26f5380f4..7f49f1975 100644
--- a/modules/front-end/src/app/features/safe/switch-archive/switch-archive.component.ts
+++ b/modules/front-end/src/app/features/safe/switch-archive/switch-archive.component.ts
@@ -3,7 +3,7 @@ import { NzMessageService } from 'ng-zorro-antd/message';
 import { NzModalService } from 'ng-zorro-antd/modal';
 import { Subject } from 'rxjs';
 import { SwitchService } from '@services/switch.service';
-import { AccountService } from '@services/account.service';
+import { OrganizationService } from '@services/organization.service';
 import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
 import { IFfParams } from "@features/safe/feature-flags/types/switch-new";
 import { encodeURIComponentFfc } from "@utils/index";
@@ -28,15 +28,15 @@ export class SwitchArchiveComponent implements OnInit {
   constructor(
     private switchService: SwitchService,
     private switchV2Service: SwitchV2Service,
-    private accountService: AccountService,
+    private accountService: OrganizationService,
     private modal: NzModalService,
     private message: NzMessageService,
     private router: Router
   ) { }
 
   ngOnInit(): void {
-    const currentAccountProjectEnv = this.accountService.getCurrentAccountProjectEnv();
-    this.currentAccountId = currentAccountProjectEnv.account.id;
+    const currentAccountProjectEnv = this.accountService.getCurrentOrganizationProjectEnv();
+    this.currentAccountId = currentAccountProjectEnv.organization.id;
     this.currentEnvId = currentAccountProjectEnv.projectEnv.envId;
     this.init();
     this.search$.next('');
diff --git a/modules/front-end/src/app/features/safe/users/index/index.component.ts b/modules/front-end/src/app/features/safe/users/index/index.component.ts
index c87b92689..b5866d0ea 100644
--- a/modules/front-end/src/app/features/safe/users/index/index.component.ts
+++ b/modules/front-end/src/app/features/safe/users/index/index.component.ts
@@ -1,7 +1,7 @@
 import { Component, OnInit } from '@angular/core';
 import { Router } from '@angular/router';
 import { Subject } from 'rxjs';
-import { AccountService } from '@services/account.service';
+import { OrganizationService } from '@services/organization.service';
 import { debounceTime } from 'rxjs/operators';
 import { EnvUserPropService } from "@services/env-user-prop.service";
 import { IUserProp, IUserType } from "@shared/types";
@@ -33,7 +33,7 @@ export class IndexComponent implements OnInit {
 
   constructor(
     private envUserService: EnvUserService,
-    private accountService: AccountService,
+    private accountService: OrganizationService,
     private envUserPropService: EnvUserPropService,
     private router: Router
   ) {
@@ -80,8 +80,8 @@ export class IndexComponent implements OnInit {
 
   isUserPropsLoading: boolean = true;
   ngOnInit(): void {
-    const currentAccountProjectEnv = this.accountService.getCurrentAccountProjectEnv();
-    this.currentAccountId = currentAccountProjectEnv.account.id;
+    const currentAccountProjectEnv = this.accountService.getCurrentOrganizationProjectEnv();
+    this.currentAccountId = currentAccountProjectEnv.organization.id;
     this.currentEnvId = currentAccountProjectEnv.projectEnv.envId;
 
     const filterAndAttributeConfig: any = JSON.parse(localStorage.getItem(CURRENT_USER_FILTER_ATTRIBUTE(this.currentEnvId)) || '{}');
diff --git a/modules/front-end/src/app/shared/types.ts b/modules/front-end/src/app/shared/types.ts
index dffa2d49e..45a5c6c96 100644
--- a/modules/front-end/src/app/shared/types.ts
+++ b/modules/front-end/src/app/shared/types.ts
@@ -1,3 +1,9 @@
+export interface IResponse {
+  success: boolean,
+  errors: string[],
+  data: any
+}
+
 export interface IUserType {
   id: string;
   name: string;
@@ -55,7 +61,6 @@ export interface IAuthProps {
   id: string;
   email: string;
   name: string;
-  phoneNumber: string;
 }
 
 export interface ISubscriptionPlan {
@@ -63,15 +68,15 @@ export interface ISubscriptionPlan {
   type: string
 }
 
-export interface IAccount {
+export interface IOrganization {
   id: number,
   initialized: boolean,
-  organizationName: string,
+  name: string,
   plan?: ISubscriptionPlan
 }
 
-export interface IAccountProjectEnv {
-  account: IAccount,
+export interface IOrganizationProjectEnv {
+  organization: IOrganization,
   projectEnv: IProjectEnv
 }
 
@@ -98,11 +103,6 @@ export interface IEnvironment {
   mobileSecret: string
 }
 
-export interface ISubsriptionPlan {
-  id: string,
-  type: string
-}
-
 export interface IAccountUser {
   userId: string,
   userName: string,
@@ -125,8 +125,7 @@ export const EnvironmentSettingTypes = {
 }
 
 export enum EnvKeyNameEnum {
-  Secret = "Secret",
-  MobileSecret = "MobileSecret"
+  Secret = "Secret"
 }
 
 export interface IEnvKey {
diff --git a/modules/front-end/src/app/shared/utils/index.ts b/modules/front-end/src/app/shared/utils/index.ts
index e2bd421e0..a10520276 100644
--- a/modules/front-end/src/app/shared/utils/index.ts
+++ b/modules/front-end/src/app/shared/utils/index.ts
@@ -4,9 +4,10 @@ import {IJsonContent, IRulePercentageRollout} from "@features/safe/feature-flags
 import {USER_IS_IN_SEGMENT, USER_IS_NOT_IN_SEGMENT} from "@shared/constants";
 
 export function getAuth() : IAuthProps | null {
-    const auth = localStorage.getItem(USER_PROFILE);
-    if (!auth) return null;
-    return JSON.parse(auth);
+  const auth = localStorage.getItem(USER_PROFILE);
+  if (!auth) return null;
+  const profile = JSON.parse(auth);
+  return { name: profile.email, ...profile };
 }
 
 export function getLocalStorageKey(key: string, isUserIndependant: boolean): string {
diff --git a/modules/front-end/src/app/shared/utils/localstorage-keys.ts b/modules/front-end/src/app/shared/utils/localstorage-keys.ts
index 5c1f65150..b2cd07f09 100644
--- a/modules/front-end/src/app/shared/utils/localstorage-keys.ts
+++ b/modules/front-end/src/app/shared/utils/localstorage-keys.ts
@@ -8,8 +8,8 @@ export function CURRENT_PROJECT(): string {
   return getLocalStorageKey('current-project', false);
 }
 
-export function CURRENT_ACCOUNT(): string {
-  return getLocalStorageKey('current-account', false);
+export function CURRENT_ORGANIZATION(): string {
+  return getLocalStorageKey('current-organization', false);
 }
 
 export function CURRENT_USER_FILTER_ATTRIBUTE(envId: number): string {
diff --git a/modules/front-end/src/app/shared/utils/project-env.ts b/modules/front-end/src/app/shared/utils/project-env.ts
index 7c9f977f5..b324e79ae 100644
--- a/modules/front-end/src/app/shared/utils/project-env.ts
+++ b/modules/front-end/src/app/shared/utils/project-env.ts
@@ -1,8 +1,8 @@
-import { IAccount, IProjectEnv } from "@shared/types";
-import { CURRENT_ACCOUNT, CURRENT_PROJECT } from "./localstorage-keys";
+import { IOrganization, IProjectEnv } from "@shared/types";
+import { CURRENT_ORGANIZATION, CURRENT_PROJECT } from "./localstorage-keys";
 
-export function getCurrentAccount(): IAccount {
-  const json = localStorage.getItem(CURRENT_ACCOUNT());
+export function getCurrentOrganization(): IOrganization {
+  const json = localStorage.getItem(CURRENT_ORGANIZATION());
   if (json) {
     return JSON.parse(json);
   }
diff --git a/modules/front-end/src/environments/environment.ts b/modules/front-end/src/environments/environment.ts
index 8e8f3c453..1f0569e69 100644
--- a/modules/front-end/src/environments/environment.ts
+++ b/modules/front-end/src/environments/environment.ts
@@ -1,4 +1,4 @@
 export const environment = {
   production: false,
-  url: '__API_URL__'
+  url: 'https://api-dev.featureflag.co'
 };
diff --git a/modules/front-end/src/locale/messages.xlf b/modules/front-end/src/locale/messages.xlf
index 5b504e373..55285b83c 100644
--- a/modules/front-end/src/locale/messages.xlf
+++ b/modules/front-end/src/locale/messages.xlf
@@ -2,145 +2,182 @@
 <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
   <file source-language="en" datatype="plaintext" original="ng2.template">
     <body>
-      <trans-unit id="org.org.createOrg" datatype="html">
-        <source>Create organization</source>
+      <trans-unit id="org.project.permissionMayInvalidAfterOperation" datatype="html">
+        <source>Permission may become invalid after this operation</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.html</context>
-          <context context-type="linenumber">8</context>
+          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
+          <context context-type="linenumber">15</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
+          <context context-type="linenumber">16</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="org.org.orgName" datatype="html">
-        <source>Organization name</source>
+      <trans-unit id="common.name" datatype="html">
+        <source>Name</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.html</context>
-          <context context-type="linenumber">13</context>
+          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
+          <context context-type="linenumber">22</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">3</context>
+          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
+          <context context-type="linenumber">24</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.orgMandatory" datatype="html">
-        <source>Organization name is mandatory!</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.html</context>
+          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
           <context context-type="linenumber">14</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">6</context>
+          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
+          <context context-type="linenumber">16</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="5243233792859835904" datatype="html">
-        <source>Organization name</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.html</context>
-          <context context-type="linenumber">15</context>
+          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
+          <context context-type="linenumber">22</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">8</context>
+          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
+          <context context-type="linenumber">24</context>
         </context-group>
-        <note priority="1" from="description">@org.org.orgNamePlaceholder</note>
-      </trans-unit>
-      <trans-unit id="common.save" datatype="html">
-        <source>Save</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.html</context>
-          <context context-type="linenumber">18</context>
+          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
+          <context context-type="linenumber">12</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
+          <context context-type="linenumber">14</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
-          <context context-type="linenumber">86</context>
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.html</context>
+          <context context-type="linenumber">13</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
-          <context context-type="linenumber">32</context>
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.html</context>
+          <context context-type="linenumber">15</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">87</context>
+          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
+          <context context-type="linenumber">14</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
-          <context context-type="linenumber">32</context>
+          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
+          <context context-type="linenumber">23</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="linenumber">25</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
-          <context context-type="linenumber">92</context>
+          <context context-type="linenumber">41</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/target-user/target-user.component.html</context>
+          <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">76</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
+          <context context-type="linenumber">37,38</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
+          <context context-type="linenumber">93,94</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
-          <context context-type="linenumber">170</context>
+          <context context-type="linenumber">55</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-view.component.ts</context>
-          <context context-type="linenumber">52</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
+          <context context-type="linenumber">148</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
-          <context context-type="linenumber">9</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
+          <context context-type="linenumber">150</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
-          <context context-type="linenumber">76</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/setting/setting.component.html</context>
+          <context context-type="linenumber">10</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/setting/setting.component.html</context>
+          <context context-type="linenumber">17</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
-          <context context-type="linenumber">85</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
+          <context context-type="linenumber">27</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.orgCreated" datatype="html">
-        <source>Organization successfully created!</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.ts</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/index/index.component.html</context>
+          <context context-type="linenumber">29</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.permissionMayInvalidAfterOperation" datatype="html">
-        <source>Permission may become invalid after this operation</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/groups/groups.component.html</context>
+          <context context-type="linenumber">27</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/setting/setting.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/setting/setting.component.html</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
+          <context context-type="linenumber">28</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
+          <context context-type="linenumber">27</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
+          <context context-type="linenumber">23</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
           <context context-type="linenumber">15</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
-          <context context-type="linenumber">16</context>
+          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
+          <context context-type="linenumber">30</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.envName" datatype="html">
-        <source>Environment name</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
+          <context context-type="linenumber">62</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">25</context>
+          <context context-type="sourcefile">src/app/features/safe/users/details/details.component.html</context>
+          <context context-type="linenumber">17</context>
         </context-group>
       </trans-unit>
       <trans-unit id="org.project.envNameMandatory" datatype="html">
@@ -150,13 +187,6 @@
           <context context-type="linenumber">23</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="org.project.envNamePlaceholder" datatype="html">
-        <source>Environment name</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
-          <context context-type="linenumber">24</context>
-        </context-group>
-      </trans-unit>
       <trans-unit id="org.project.envDescription" datatype="html">
         <source>Description</source>
         <context-group purpose="location">
@@ -171,6 +201,73 @@
           <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
+      <trans-unit id="common.save" datatype="html">
+        <source>Save</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
+          <context context-type="linenumber">37</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
+          <context context-type="linenumber">86</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
+          <context context-type="linenumber">69</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
+          <context context-type="linenumber">123</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.html</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
+          <context context-type="linenumber">92</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/target-user/target-user.component.html</context>
+          <context context-type="linenumber">76</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
+          <context context-type="linenumber">170</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-view.component.ts</context>
+          <context context-type="linenumber">52</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
+          <context context-type="linenumber">76</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">22</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
+          <context context-type="linenumber">85</context>
+        </context-group>
+      </trans-unit>
       <trans-unit id="org.project.editEnv" datatype="html">
         <source>Edit environment</source>
         <context-group purpose="location">
@@ -185,8 +282,8 @@
           <context context-type="linenumber">34</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">87</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">85</context>
         </context-group>
       </trans-unit>
       <trans-unit id="org.project.envUpdateSuccess" datatype="html">
@@ -247,11 +344,11 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">46</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">81</context>
+          <context context-type="linenumber">63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
@@ -332,138 +429,211 @@
           <context context-type="linenumber">44</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="iam.groups.group-drawer.title" datatype="html">
-        <source>Add group</source>
+      <trans-unit id="core.components.findrule.operators.istrue" datatype="html">
+        <source>is true</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
-          <context context-type="linenumber">7</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">26</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="common.name" datatype="html">
-        <source>Name</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
-          <context context-type="linenumber">14</context>
-        </context-group>
+      <trans-unit id="core.components.findrule.operators.isfalse" datatype="html">
+        <source>is false</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
-          <context context-type="linenumber">16</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
-          <context context-type="linenumber">12</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">31</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.equals" datatype="html">
+        <source>equals</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
-          <context context-type="linenumber">14</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">36</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.notequal" datatype="html">
+        <source>not equal</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
-          <context context-type="linenumber">14</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">40</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.lessthan" datatype="html">
+        <source>less than</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
-          <context context-type="linenumber">16</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">45</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.biggerthan" datatype="html">
+        <source>bigger than</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
-          <context context-type="linenumber">41</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">50</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.lessequalthan" datatype="html">
+        <source>less equal than</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
-          <context context-type="linenumber">76</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">55</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.biggerequalthan" datatype="html">
+        <source>bigger equal than</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
-          <context context-type="linenumber">37,38</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">60</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.isoneof" datatype="html">
+        <source>is one of</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
-          <context context-type="linenumber">93,94</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">65</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.notoneof" datatype="html">
+        <source>not one of</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
-          <context context-type="linenumber">25</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">70</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.contains" datatype="html">
+        <source>contains</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">75</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.notcontain" datatype="html">
+        <source>not contain</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
-          <context context-type="linenumber">55</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">80</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.startwith" datatype="html">
+        <source>start with</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
-          <context context-type="linenumber">148</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">85</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.endswith" datatype="html">
+        <source>ends with</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
-          <context context-type="linenumber">150</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">90</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.matchregex" datatype="html">
+        <source>match regex</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/setting/setting.component.html</context>
-          <context context-type="linenumber">10</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">95</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.notmatchregex" datatype="html">
+        <source>not match regex</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/setting/setting.component.html</context>
-          <context context-type="linenumber">17</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">100</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.if" datatype="html">
+        <source>If</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
-          <context context-type="linenumber">27</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">2</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.and" datatype="html">
+        <source>and</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/groups/index/index.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">4</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.selectuserproperty" datatype="html">
+        <source>Select property</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/groups/groups.component.html</context>
-          <context context-type="linenumber">27</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">7</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.selectcondition" datatype="html">
+        <source>condition</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/setting/setting.component.html</context>
-          <context context-type="linenumber">10</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">14</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.selectvalues" datatype="html">
+        <source>values</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/setting/setting.component.html</context>
-          <context context-type="linenumber">17</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">25</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
-          <context context-type="linenumber">28</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">59</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.pleaseinput" datatype="html">
+        <source>input string or number</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">38</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.inputnumber" datatype="html">
+        <source>input a number</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
-          <context context-type="linenumber">27</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">45</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.segments" datatype="html">
+        <source>segments</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">10</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">79</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.alloptions" datatype="html">
+        <source>total options</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">106</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.serve" datatype="html">
+        <source>serve</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
-          <context context-type="linenumber">15</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/serve-multistates/serve-multistates.component.html</context>
+          <context context-type="linenumber">3</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="app.components.findrule.selectvariation" datatype="html">
+        <source>variation</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/serve-multistates/serve-multistates.component.html</context>
+          <context context-type="linenumber">6</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="app.components.findrule.rolloutpercentage" datatype="html">
+        <source>Rollout percentage</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
-          <context context-type="linenumber">62</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/serve-multistates/serve-multistates.component.html</context>
+          <context context-type="linenumber">11</context>
         </context-group>
+      </trans-unit>
+      <trans-unit id="iam.groups.group-drawer.title" datatype="html">
+        <source>Add group</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/users/details/details.component.html</context>
-          <context context-type="linenumber">17</context>
+          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
+          <context context-type="linenumber">7</context>
         </context-group>
       </trans-unit>
       <trans-unit id="common.validating" datatype="html">
@@ -561,6 +731,14 @@
           <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
           <context context-type="linenumber">31</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
+          <context context-type="linenumber">26</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
           <context context-type="linenumber">25</context>
@@ -582,7 +760,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.ts</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">117</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.ts</context>
@@ -808,89 +986,39 @@
           <context context-type="linenumber">7</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="iam.team.member-drawer.invitation-mode" datatype="html">
-        <source>Invitation mode</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">13</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.mobile" datatype="html">
-        <source>Mobile</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">16</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">24</context>
-        </context-group>
-      </trans-unit>
       <trans-unit id="iam.team.member-drawer.email" datatype="html">
         <source>Email</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">17</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">32</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.invalid-mobile" datatype="html">
-        <source>Invalid mobile number</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">25</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.mobile-placeholder" datatype="html">
-        <source>Mobile number</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">26</context>
+          <context context-type="linenumber">14</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.team.member-drawer.invalid-email" datatype="html">
         <source>Invalid Email</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">15</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.team.member-drawer.email-placeholder" datatype="html">
         <source>Email</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">34</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.name" datatype="html">
-        <source>Name</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">40</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.name-placeholder" datatype="html">
-        <source>Name</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">42</context>
+          <context context-type="linenumber">16</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.team.member-drawer.permissions" datatype="html">
         <source>Permissions</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">47</context>
+          <context context-type="linenumber">29</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.team.member-drawer.policy-group-set-at-least-one" datatype="html">
         <source>(Policy and group cannot be both empty)</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">47</context>
+          <context context-type="linenumber">29</context>
         </context-group>
       </trans-unit>
       <trans-unit id="4086606389696938932" datatype="html">
@@ -1142,6 +1270,35 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">317</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/onboarding/steps/steps.component.ts</context>
+          <context context-type="linenumber">63</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.org.createOrg" datatype="html">
+        <source>Create organization</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.org.orgMandatory" datatype="html">
+        <source>Organization name is mandatory!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.html</context>
+          <context context-type="linenumber">14</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">6</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.org.orgCreated" datatype="html">
+        <source>Organization successfully created!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.ts</context>
+          <context context-type="linenumber">60</context>
+        </context-group>
       </trans-unit>
       <trans-unit id="iam.policies.policy-drawer.title" datatype="html">
         <source>Add policy</source>
@@ -1164,13 +1321,6 @@
           <context context-type="linenumber">20</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="org.project.projectName" datatype="html">
-        <source>Project name</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
-          <context context-type="linenumber">23</context>
-        </context-group>
-      </trans-unit>
       <trans-unit id="org.project.projectNameMandatory" datatype="html">
         <source>Project name is mandatory!</source>
         <context-group purpose="location">
@@ -1178,13 +1328,6 @@
           <context context-type="linenumber">24</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="org.project.projectNamePlaceholder" datatype="html">
-        <source>Project name</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
-          <context context-type="linenumber">25</context>
-        </context-group>
-      </trans-unit>
       <trans-unit id="org.project.editProject" datatype="html">
         <source>Edit project</source>
         <context-group purpose="location">
@@ -1198,10 +1341,6 @@
           <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.ts</context>
           <context context-type="linenumber">33</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">12</context>
-        </context-group>
       </trans-unit>
       <trans-unit id="org.project.projectUpdateSuccess" datatype="html">
         <source>Project successfully updated</source>
@@ -1284,6 +1423,10 @@
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
           <context context-type="linenumber">55</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
           <context context-type="linenumber">61</context>
@@ -1292,6 +1435,14 @@
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
           <context context-type="linenumber">54</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">12</context>
@@ -1424,7 +1575,7 @@
         </context-group>
       </trans-unit>
       <trans-unit id="common.remove-confirm" datatype="html">
-        <source>Can not be recovered, are you sure to remove it?</source>
+        <source>This operation cannot be reverted, are you sure to remove it?</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">96</context>
@@ -1433,14 +1584,6 @@
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">200</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">54</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">77</context>
-        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">89</context>
@@ -1479,11 +1622,19 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">42</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">70</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">52</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">75</context>
         </context-group>
       </trans-unit>
       <trans-unit id="common.remove" datatype="html">
@@ -1542,11 +1693,19 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">47</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">74</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
@@ -1575,6 +1734,10 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">169,170</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">171</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">169</context>
@@ -2012,7 +2175,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">67</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
@@ -2073,10 +2236,6 @@
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.ts</context>
           <context context-type="linenumber">43</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.ts</context>
-          <context context-type="linenumber">175</context>
-        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">39</context>
@@ -2117,6 +2276,31 @@
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.ts</context>
           <context context-type="linenumber">92</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.ts</context>
+          <context context-type="linenumber">175</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="permission.sys-managed" datatype="html">
+        <source>System Managed</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/pipes/policy-type.pipe.ts</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="permission.customer-managed" datatype="html">
+        <source>Customer Managed</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/pipes/policy-type.pipe.ts</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="permissions.need-permissions-to-operate" datatype="html">
+        <source>You don&apos;t have permissions to take this action, please contact the admin to grant you the necessary permissions</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/services/permissions.service.ts</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
       </trans-unit>
       <trans-unit id="2454050363478003966" datatype="html">
         <source>Login</source>
@@ -2185,172 +2369,6 @@
           <context context-type="linenumber">69</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="org.org.tabtitle" datatype="html">
-        <source>Organization</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account-settings.component.html</context>
-          <context context-type="linenumber">4</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.tabtitle" datatype="html">
-        <source>Projects</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account-settings.component.html</context>
-          <context context-type="linenumber">11</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.tabtitle" datatype="html">
-        <source>Profile</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account-settings.component.html</context>
-          <context context-type="linenumber">18</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.updateOrgName" datatype="html">
-        <source>Update organization name</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">17</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.switchorg" datatype="html">
-        <source>Switch organization</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">22</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.selectOrg" datatype="html">
-        <source>Select organization</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">24</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.orgNameUpdateSuccess" datatype="html">
-        <source>Organization name updated!</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.ts</context>
-          <context context-type="linenumber">91</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.email" datatype="html">
-        <source>Email</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">4</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.emailMandatory" datatype="html">
-        <source>Email is mandatory!</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">5</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.emailPlaceholder" datatype="html">
-        <source>Email</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">7</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.mobile" datatype="html">
-        <source>Mobile</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">15</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.mobileMandatory" datatype="html">
-        <source>Mobile is mandatory!</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">16</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.mobilePlaceholder" datatype="html">
-        <source>Mobile</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">18</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.save" datatype="html">
-        <source>Save</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">28</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.notProvided" datatype="html">
-        <source>Not provided</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.ts</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.ts</context>
-          <context context-type="linenumber">27</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.profileUpdateSuccess" datatype="html">
-        <source>Profile successfully updated</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.ts</context>
-          <context context-type="linenumber">46</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.featureUnderConstruction" datatype="html">
-        <source>This feature will be released soon!</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.ts</context>
-          <context context-type="linenumber">51</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.projectFilterPlacehoder" datatype="html">
-        <source>Filter by name</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">5</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.description" datatype="html">
-        <source>Description</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">29</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.secret" datatype="html">
-        <source>Secret</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">35</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.edit" datatype="html">
-        <source>Edit</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">50</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">72</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.remove" datatype="html">
-        <source>Remove</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">57</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">81</context>
-        </context-group>
-      </trans-unit>
       <trans-unit id="sync-locally" datatype="html">
         <source>Download/Upload</source>
         <context-group purpose="location">
@@ -2496,6 +2514,14 @@
           <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
           <context context-type="linenumber">30</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
       </trans-unit>
       <trans-unit id="common.url" datatype="html">
         <source>URL</source>
@@ -2886,7 +2912,7 @@
         </context-group>
       </trans-unit>
       <trans-unit id="ff.if-off-return" datatype="html">
-        <source>If OFF, return</source>
+        <source>If OFF, serve</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">54,56</context>
@@ -2966,50 +2992,131 @@
           <context context-type="linenumber">208</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
-          <context context-type="linenumber">218</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
+          <context context-type="linenumber">218</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ff.variation-used-by-rules" datatype="html">
+        <source>This variation is used by rules, remove the reference before it can be safely removed</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
+          <context context-type="linenumber">213</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ff.variation-used-by-off" datatype="html">
+        <source>This variation is used by the value returned when the feature flag is OFF, remove the reference before it can be safely removed</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
+          <context context-type="linenumber">223</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ff.when-archived-status-change-to-off" datatype="html">
+        <source>When archived, the status would be changed to</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
+          <context context-type="linenumber">297</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ff.and-return-varation-change-to" datatype="html">
+        <source>and the returning variation would be changed to</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
+          <context context-type="linenumber">299,297</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ff.are-you-sure-to-archive-ff" datatype="html">
+        <source>Are you sure to archive this feature flag?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
+          <context context-type="linenumber">304,302</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="common.download-failed" datatype="html">
+        <source>Download failed</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
+          <context context-type="linenumber">359</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.setabtestrule" datatype="html">
+        <source><x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i nz-icon nzType=&quot;filter&quot; nzTheme=&quot;outline&quot;&gt;"/><x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> Set ab test rule </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">7,9</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.save" datatype="html">
+        <source><x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i nz-icon nzType=&quot;icons:icon-save&quot;&gt;"/><x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/> Save &amp; Update </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">11,13</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.changerequest" datatype="html">
+        <source> Change request </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">20,22</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.scheduling" datatype="html">
+        <source> Scheduling </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">24,26</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.defaultrule" datatype="html">
+        <source>Default rule</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">34</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="ff.variation-used-by-rules" datatype="html">
-        <source>This variation is used by rules, remove the reference before it can be safely removed</source>
+      <trans-unit id="ff.components.details.targeting.defaultrule-tooltip" datatype="html">
+        <source>If the flag is turned on, the following variation is served</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
-          <context context-type="linenumber">213</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">35</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="ff.variation-used-by-off" datatype="html">
-        <source>This variation is used by the value returned when the feature flag is OFF, remove the reference before it can be safely removed</source>
+      <trans-unit id="ff.components.details.targeting.individualtargeting" datatype="html">
+        <source>Individual targeting</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
-          <context context-type="linenumber">223</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">48</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="ff.when-archived-status-change-to-off" datatype="html">
-        <source>When archived, the status would be changed to</source>
+      <trans-unit id="ff.components.details.targeting.coverdefaultrule-tooltip" datatype="html">
+        <source>The default rule will be overridden when the rules are met</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
-          <context context-type="linenumber">297</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">54</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">69</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="ff.and-return-varation-change-to" datatype="html">
-        <source>and the returning variation would be changed to</source>
+      <trans-unit id="ff.components.details.targeting.customizedrules" datatype="html">
+        <source>Target users who match these rules</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
-          <context context-type="linenumber">299,297</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">68</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="ff.are-you-sure-to-archive-ff" datatype="html">
-        <source>Are you sure to archive this feature flag?</source>
+      <trans-unit id="common.save-success" datatype="html">
+        <source>Saved Successfully</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
-          <context context-type="linenumber">304,302</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.ts</context>
+          <context context-type="linenumber">313</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="common.download-failed" datatype="html">
-        <source>Download failed</source>
+      <trans-unit id="common.save-fial" datatype="html">
+        <source>Failed to Save</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
-          <context context-type="linenumber">359</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.ts</context>
+          <context context-type="linenumber">319</context>
         </context-group>
       </trans-unit>
       <trans-unit id="ff.routing.idx.pageTitle" datatype="html">
@@ -3299,6 +3406,17 @@
           <context context-type="linenumber">253</context>
         </context-group>
       </trans-unit>
+      <trans-unit id="common.rule" datatype="html">
+        <source>Rule</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/types/switch-new.ts</context>
+          <context context-type="linenumber">174</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/segments/types/segments-index.ts</context>
+          <context context-type="linenumber">91</context>
+        </context-group>
+      </trans-unit>
       <trans-unit id="common.action" datatype="html">
         <source>Action</source>
         <context-group purpose="location">
@@ -3321,7 +3439,7 @@
         </context-group>
       </trans-unit>
       <trans-unit id="iam.policies.details.managed-policies-cannot-be-modified" datatype="html">
-        <source>Managed policies cannot be modified</source>
+        <source>System Managed policies cannot be modified</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
           <context context-type="linenumber">1</context>
@@ -3331,8 +3449,8 @@
           <context context-type="linenumber">152</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="iam.policies.details.copy-policy" datatype="html">
-        <source>Copy policy</source>
+      <trans-unit id="common.copy" datatype="html">
+        <source>Copy</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
           <context context-type="linenumber">5</context>
@@ -3437,6 +3555,24 @@
           <context context-type="linenumber">68</context>
         </context-group>
       </trans-unit>
+      <trans-unit id="common.team" datatype="html">
+        <source>Team</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/details.component.html</context>
+          <context context-type="linenumber">7</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/details.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="common.policies" datatype="html">
+        <source>Policies</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/details.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+      </trans-unit>
       <trans-unit id="iam.groups.details.dp-filter-placeholder" datatype="html">
         <source>Filter by policy name</source>
         <context-group purpose="location">
@@ -3445,14 +3581,14 @@
         </context-group>
       </trans-unit>
       <trans-unit id="iam.groups.details.all-policies" datatype="html">
-        <source>All policies</source>
+        <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
           <context context-type="linenumber">13</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.groups.details.current-policies" datatype="html">
-        <source>Policies binded to current group</source>
+        <source>Affected to current group</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
           <context context-type="linenumber">14</context>
@@ -3464,14 +3600,6 @@
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
           <context context-type="linenumber">29</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
-          <context context-type="linenumber">30</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
-          <context context-type="linenumber">23</context>
-        </context-group>
       </trans-unit>
       <trans-unit id="iam.team.details.type" datatype="html">
         <source>Type</source>
@@ -3479,14 +3607,6 @@
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
-          <context context-type="linenumber">31</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
-          <context context-type="linenumber">25</context>
-        </context-group>
       </trans-unit>
       <trans-unit id="iam.team.details.description" datatype="html">
         <source>Description</source>
@@ -3494,18 +3614,10 @@
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
           <context context-type="linenumber">31</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
-          <context context-type="linenumber">32</context>
-        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
           <context context-type="linenumber">28</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
-          <context context-type="linenumber">26</context>
-        </context-group>
       </trans-unit>
       <trans-unit id="iam.group.details.remove-policy-confirm" datatype="html">
         <source>Are you sure to remove the policy from the group?</source>
@@ -3534,7 +3646,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
@@ -3542,21 +3654,21 @@
         </context-group>
       </trans-unit>
       <trans-unit id="iam.groups.details.team-filter-placeholder" datatype="html">
-        <source>Filter by mobile or Email</source>
+        <source>Filter by Email</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.groups.details.all-members" datatype="html">
-        <source>All team members</source>
+        <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.groups.details.current-members" datatype="html">
-        <source>Members included in current group</source>
+        <source>Contained by current group</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
           <context context-type="linenumber">12</context>
@@ -3591,10 +3703,6 @@
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">27</context>
-        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
           <context context-type="linenumber">31</context>
@@ -3642,13 +3750,6 @@
           <context context-type="linenumber">28</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="common.team" datatype="html">
-        <source>Team</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/details.component.html</context>
-          <context context-type="linenumber">13</context>
-        </context-group>
-      </trans-unit>
       <trans-unit id="common.groups" datatype="html">
         <source>Groups</source>
         <context-group purpose="location">
@@ -3664,14 +3765,14 @@
         </context-group>
       </trans-unit>
       <trans-unit id="iam.policies.details.all-groups" datatype="html">
-        <source>All groups</source>
+        <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/groups/groups.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.policies.details.current-groups" datatype="html">
-        <source>Groups current policy binded to</source>
+        <source>Groups with current policy</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/groups/groups.component.html</context>
           <context context-type="linenumber">12</context>
@@ -3692,14 +3793,14 @@
         </context-group>
       </trans-unit>
       <trans-unit id="iam.policies.details.all-members" datatype="html">
-        <source>All team members</source>
+        <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.policies.policies.current-members" datatype="html">
-        <source>Members current policy binded to</source>
+        <source>Members with current policy</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
           <context context-type="linenumber">12</context>
@@ -3719,13 +3820,6 @@
           <context context-type="linenumber">4</context>
         </context-group>
       </trans-unit>
-      <trans-unit id="iam.policies.idx.add" datatype="html">
-        <source>Add</source>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
-          <context context-type="linenumber">11</context>
-        </context-group>
-      </trans-unit>
       <trans-unit id="iam.team.details.groups" datatype="html">
         <source>Groups</source>
         <context-group purpose="location">
@@ -3759,21 +3853,21 @@
         </context-group>
       </trans-unit>
       <trans-unit id="iam.team.details.all-policies" datatype="html">
-        <source>All policies</source>
+        <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
           <context context-type="linenumber">13</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.team.details.current-policies" datatype="html">
-        <source>Policies binded to current team member</source>
+        <source>Affected to current member</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
           <context context-type="linenumber">14</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.team.details.remove-policy-from" datatype="html">
-        <source>Are you sure to remove the policy from the member?</source>
+        <source>Are you sure to remove the policy from current member?</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
           <context context-type="linenumber">50</context>
@@ -3787,14 +3881,14 @@
         </context-group>
       </trans-unit>
       <trans-unit id="iam.team.details.all-groups" datatype="html">
-        <source>All groups</source>
+        <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
       </trans-unit>
       <trans-unit id="iam.team.details.current-groups" datatype="html">
-        <source>Groups including current team member</source>
+        <source>Containing current member</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
           <context context-type="linenumber">12</context>
@@ -3829,7 +3923,7 @@
         </context-group>
       </trans-unit>
       <trans-unit id="iam.team.idx.searchPlaceholder" datatype="html">
-        <source>Filter by mobile or Email</source>
+        <source>Filter by Email</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
           <context context-type="linenumber">4</context>
@@ -3870,6 +3964,186 @@
           <context context-type="linenumber">53</context>
         </context-group>
       </trans-unit>
+      <trans-unit id="onboarding.create-org-project" datatype="html">
+        <source>Create organization and project</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/onboarding/steps/steps.component.html</context>
+          <context context-type="linenumber">4</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="common.org-name" datatype="html">
+        <source>Organization name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/onboarding/steps/steps.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="common.project-name" datatype="html">
+        <source>Project name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/onboarding/steps/steps.component.html</context>
+          <context context-type="linenumber">16</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="common.complete" datatype="html">
+        <source>Complete</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/onboarding/steps/steps.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.org.orgName" datatype="html">
+        <source>Name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">3</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="5243233792859835904" datatype="html">
+        <source>Organization name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <note priority="1" from="description">@org.org.orgNamePlaceholder</note>
+      </trans-unit>
+      <trans-unit id="org.org.updateOrgName" datatype="html">
+        <source>Update</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.org.switchorg" datatype="html">
+        <source>Switch organization</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">22</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.org.selectOrg" datatype="html">
+        <source>Select organization</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">24</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.org.orgNameUpdateSuccess" datatype="html">
+        <source>Organization name updated!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.ts</context>
+          <context context-type="linenumber">91</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.org.tabtitle" datatype="html">
+        <source>Organization</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organizations.component.html</context>
+          <context context-type="linenumber">4</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.project.tabtitle" datatype="html">
+        <source>Projects</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organizations.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.profile.tabtitle" datatype="html">
+        <source>Profile</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organizations.component.html</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.profile.email" datatype="html">
+        <source>Email</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.html</context>
+          <context context-type="linenumber">4</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.profile.emailMandatory" datatype="html">
+        <source>Email is mandatory!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.html</context>
+          <context context-type="linenumber">5</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.profile.emailPlaceholder" datatype="html">
+        <source>Email</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.html</context>
+          <context context-type="linenumber">7</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.profile.save" datatype="html">
+        <source>Save</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.html</context>
+          <context context-type="linenumber">16</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.profile.notProvided" datatype="html">
+        <source>Not provided</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.ts</context>
+          <context context-type="linenumber">26</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.profile.profileUpdateSuccess" datatype="html">
+        <source>Profile successfully updated</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.ts</context>
+          <context context-type="linenumber">45</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.profile.featureUnderConstruction" datatype="html">
+        <source>This feature will be released soon!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.ts</context>
+          <context context-type="linenumber">50</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.project.projectFilterPlacehoder" datatype="html">
+        <source>Filter by name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">5</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.project.envName" datatype="html">
+        <source>Environment name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.project.description" datatype="html">
+        <source>Description</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.project.secret" datatype="html">
+        <source>Secret</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">35</context>
+        </context-group>
+      </trans-unit>
+      <trans-unit id="org.project.edit" datatype="html">
+        <source>Edit</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">48</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">70</context>
+        </context-group>
+      </trans-unit>
       <trans-unit id="segments" datatype="html">
         <source>Segments</source>
         <context-group purpose="location">
@@ -3955,7 +4229,7 @@
         </context-group>
       </trans-unit>
       <trans-unit id="menu.organization" datatype="html">
-        <source>Orgnization</source>
+        <source>Organization</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">76,75</context>
diff --git a/modules/front-end/src/locale/messages.zh.xlf b/modules/front-end/src/locale/messages.zh.xlf
index 059e4113a..08c3dca40 100644
--- a/modules/front-end/src/locale/messages.zh.xlf
+++ b/modules/front-end/src/locale/messages.zh.xlf
@@ -1,243 +1,332 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
+<?xml version="1.0" encoding="UTF-8"?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
   <file source-language="zh" datatype="plaintext" original="ng2.template">
     <body>
-      <trans-unit id="org.org.createOrg" datatype="html">
-        <source>Create organization</source>
-        <target>创建机构</target>
+      <trans-unit id="org.project.permissionMayInvalidAfterOperation" datatype="html">
+        <source>Permission may become invalid after this operation</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.html</context>
-          <context context-type="linenumber">8</context>
+          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
+          <context context-type="linenumber">15</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
+          <context context-type="linenumber">16</context>
         </context-group>
+        <target>修改环境名称后对其设置的权限可能会失效</target>
       </trans-unit>
-      <trans-unit id="org.org.orgName" datatype="html">
-        <source>Organization name</source>
-        <target>机构名称</target>
+      <trans-unit id="common.name" datatype="html">
+        <source>Name</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.html</context>
-          <context context-type="linenumber">13</context>
+          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
+          <context context-type="linenumber">22</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">3</context>
+          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
+          <context context-type="linenumber">24</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.orgMandatory" datatype="html">
-        <source>Organization name is mandatory!</source>
-        <target>机构名称不能为空</target>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.html</context>
+          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
           <context context-type="linenumber">14</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">6</context>
+          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
+          <context context-type="linenumber">16</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="5243233792859835904" datatype="html">
-        <source>Organization name</source>
-        <target>机构名称</target>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.html</context>
-          <context context-type="linenumber">15</context>
+          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
+          <context context-type="linenumber">22</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">8</context>
+          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
+          <context context-type="linenumber">24</context>
         </context-group>
-        <note priority="1" from="description">@org.org.orgNamePlaceholder</note>
-      </trans-unit>
-      <trans-unit id="common.save" datatype="html">
-        <source>Save</source>
-        <target>保存</target>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.html</context>
-          <context context-type="linenumber">18</context>
+          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
+          <context context-type="linenumber">12</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
-          <context context-type="linenumber">37</context>
+          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
+          <context context-type="linenumber">14</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
-          <context context-type="linenumber">86</context>
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.html</context>
+          <context context-type="linenumber">13</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
-          <context context-type="linenumber">32</context>
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.html</context>
+          <context context-type="linenumber">15</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">87</context>
+          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
+          <context context-type="linenumber">14</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
-          <context context-type="linenumber">123</context>
+          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
+          <context context-type="linenumber">16</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
-          <context context-type="linenumber">32</context>
+          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
+          <context context-type="linenumber">23</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="linenumber">25</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
-          <context context-type="linenumber">92</context>
+          <context context-type="linenumber">41</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/target-user/target-user.component.html</context>
+          <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">76</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
+          <context context-type="linenumber">37,38</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
+          <context context-type="linenumber">93,94</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
-          <context context-type="linenumber">170</context>
+          <context context-type="linenumber">55</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-view.component.ts</context>
-          <context context-type="linenumber">52</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
+          <context context-type="linenumber">148</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
-          <context context-type="linenumber">9</context>
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
+          <context context-type="linenumber">150</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
-          <context context-type="linenumber">76</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/setting/setting.component.html</context>
+          <context context-type="linenumber">10</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/setting/setting.component.html</context>
+          <context context-type="linenumber">17</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
-          <context context-type="linenumber">85</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
+          <context context-type="linenumber">27</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.orgCreated" datatype="html">
-        <source>Organization successfully created!</source>
-        <target>机构创建成功</target>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/account-drawer/account-drawer.component.ts</context>
-          <context context-type="linenumber">60</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/index/index.component.html</context>
+          <context context-type="linenumber">29</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.permissionMayInvalidAfterOperation" datatype="html">
-        <source>Permission may become invalid after this operation</source>
-        <target>修改环境名称后对其设置的权限可能会失效</target>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/groups/groups.component.html</context>
+          <context context-type="linenumber">27</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/setting/setting.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/setting/setting.component.html</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
+          <context context-type="linenumber">28</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
+          <context context-type="linenumber">27</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
+          <context context-type="linenumber">23</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
+          <context context-type="linenumber">10</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
           <context context-type="linenumber">15</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
-          <context context-type="linenumber">16</context>
+          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
+          <context context-type="linenumber">30</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.envName" datatype="html">
-        <source>Environment name</source>
-        <target>环境名称</target>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
-          <context context-type="linenumber">22</context>
+          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
+          <context context-type="linenumber">62</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">25</context>
+          <context context-type="sourcefile">src/app/features/safe/users/details/details.component.html</context>
+          <context context-type="linenumber">17</context>
         </context-group>
+        <target>名称</target>
       </trans-unit>
       <trans-unit id="org.project.envNameMandatory" datatype="html">
         <source>Environment name is mandatory!</source>
-        <target>环境名称不能为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
           <context context-type="linenumber">23</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.envNamePlaceholder" datatype="html">
-        <source>Environment name</source>
-        <target>环境名称</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
-          <context context-type="linenumber">24</context>
-        </context-group>
+        <target>环境名称不能为空</target>
       </trans-unit>
       <trans-unit id="org.project.envDescription" datatype="html">
         <source>Description</source>
-        <target>描述</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
           <context context-type="linenumber">28</context>
         </context-group>
+        <target>描述</target>
       </trans-unit>
       <trans-unit id="org.project.regenerateSecret" datatype="html">
         <source>Regenerate secret</source>
-        <target>重新生成 secret</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
           <context context-type="linenumber">35</context>
         </context-group>
+        <target>重新生成 secret</target>
+      </trans-unit>
+      <trans-unit id="common.save" datatype="html">
+        <source>Save</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.html</context>
+          <context context-type="linenumber">37</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
+          <context context-type="linenumber">86</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
+          <context context-type="linenumber">69</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
+          <context context-type="linenumber">123</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.html</context>
+          <context context-type="linenumber">18</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
+          <context context-type="linenumber">92</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/target-user/target-user.component.html</context>
+          <context context-type="linenumber">76</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
+          <context context-type="linenumber">170</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-view.component.ts</context>
+          <context context-type="linenumber">52</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
+          <context context-type="linenumber">9</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
+          <context context-type="linenumber">76</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">22</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
+          <context context-type="linenumber">85</context>
+        </context-group>
+        <target>保存</target>
       </trans-unit>
       <trans-unit id="org.project.editEnv" datatype="html">
         <source>Edit environment</source>
-        <target>编辑环境</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.ts</context>
           <context context-type="linenumber">31</context>
         </context-group>
+        <target>编辑环境</target>
       </trans-unit>
       <trans-unit id="org.project.addEnv" datatype="html">
         <source>Add environment</source>
-        <target>添加环境</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.ts</context>
           <context context-type="linenumber">34</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">87</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">85</context>
         </context-group>
+        <target>添加环境</target>
       </trans-unit>
       <trans-unit id="org.project.envUpdateSuccess" datatype="html">
         <source>Environment successfully updated</source>
-        <target>环境更新成功</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.ts</context>
           <context context-type="linenumber">109</context>
         </context-group>
+        <target>环境更新成功</target>
       </trans-unit>
       <trans-unit id="org.project.envCreateSuccess" datatype="html">
         <source>Environment successfully created</source>
-        <target>环境创建成功</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.ts</context>
           <context context-type="linenumber">122</context>
         </context-group>
+        <target>环境创建成功</target>
       </trans-unit>
       <trans-unit id="org.project.envRegenerateSuccess" datatype="html">
         <source>Successfully regenerated</source>
-        <target>重新生成 secret 成功</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/env-drawer/env-drawer.component.ts</context>
           <context context-type="linenumber">145</context>
         </context-group>
+        <target>重新生成 secret 成功</target>
       </trans-unit>
       <trans-unit id="expt.overview.expt" datatype="html">
         <source>Experiment</source>
-        <target>数据实验</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
           <context context-type="linenumber">7</context>
         </context-group>
+        <target>数据实验</target>
       </trans-unit>
       <trans-unit id="common.ff" datatype="html">
         <source>Feature flag</source>
-        <target>开关</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
           <context context-type="linenumber">13</context>
@@ -246,18 +335,18 @@
           <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
           <context context-type="linenumber">14</context>
         </context-group>
+        <target>开关</target>
       </trans-unit>
       <trans-unit id="expt.overview.select-ff" datatype="html">
         <source>Select feature flag</source>
-        <target>选择开关</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
           <context context-type="linenumber">18</context>
         </context-group>
+        <target>选择开关</target>
       </trans-unit>
       <trans-unit id="common.loading" datatype="html">
         <source>Loading...</source>
-        <target>数据加载中...</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
           <context context-type="linenumber">36</context>
@@ -268,11 +357,11 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">46</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">81</context>
+          <context context-type="linenumber">63</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
@@ -298,10 +387,10 @@
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">60</context>
         </context-group>
+        <target>数据加载中...</target>
       </trans-unit>
       <trans-unit id="common.baseline-variation" datatype="html">
         <source>Baseline variation</source>
-        <target>基准特性</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
           <context context-type="linenumber">71</context>
@@ -310,18 +399,18 @@
           <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
           <context context-type="linenumber">72</context>
         </context-group>
+        <target>基准特性</target>
       </trans-unit>
       <trans-unit id="expt.overview.select-baseline-variation" datatype="html">
         <source>Select baseline variation</source>
-        <target>选择基准特性</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.html</context>
           <context context-type="linenumber">75</context>
         </context-group>
+        <target>选择基准特性</target>
       </trans-unit>
       <trans-unit id="common.error-occurred-try-again" datatype="html">
         <source>Error occurred, please try again</source>
-        <target>发生错误，请重试</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/experiment-drawer/experiment-drawer.component.ts</context>
           <context context-type="linenumber">165</context>
@@ -334,170 +423,270 @@
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.ts</context>
           <context context-type="linenumber">135</context>
         </context-group>
+        <target>发生错误，请重试</target>
       </trans-unit>
       <trans-unit id="common.view-matched-users" datatype="html">
         <source>View matched users</source>
-        <target>查看与此规则相匹配的用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/find-rule/find-rule.component.html</context>
           <context context-type="linenumber">28</context>
         </context-group>
+        <target>查看与此规则相匹配的用户</target>
       </trans-unit>
       <trans-unit id="common.remove-rule-confirm" datatype="html">
         <source>Are you sure to remove the rule?</source>
-        <target>确认删除该规则吗？</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/find-rule/find-rule.component.html</context>
           <context context-type="linenumber">33</context>
         </context-group>
+        <target>确认删除该规则吗？</target>
       </trans-unit>
       <trans-unit id="common.matching-users" datatype="html">
         <source>Matching users</source>
-        <target>与规则相匹配的用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/find-rule/find-rule.component.html</context>
           <context context-type="linenumber">44</context>
         </context-group>
+        <target>与规则相匹配的用户</target>
       </trans-unit>
-      <trans-unit id="iam.groups.group-drawer.title" datatype="html">
-        <source>Add group</source>
-        <target>添加组</target>
+      <trans-unit id="core.components.findrule.operators.istrue" datatype="html">
+        <source>is true</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
-          <context context-type="linenumber">7</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">26</context>
         </context-group>
+        <target>为真</target>
       </trans-unit>
-      <trans-unit id="common.name" datatype="html">
-        <source>Name</source>
-        <target>名称</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
-          <context context-type="linenumber">14</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
-          <context context-type="linenumber">16</context>
-        </context-group>
+      <trans-unit id="core.components.findrule.operators.isfalse" datatype="html">
+        <source>is false</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
-          <context context-type="linenumber">12</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">31</context>
         </context-group>
+        <target>为假</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.equals" datatype="html">
+        <source>equals</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
-          <context context-type="linenumber">14</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">36</context>
         </context-group>
+        <target>等于</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.notequal" datatype="html">
+        <source>not equal</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
-          <context context-type="linenumber">14</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">40</context>
         </context-group>
+        <target>不等于</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.lessthan" datatype="html">
+        <source>less than</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
-          <context context-type="linenumber">16</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">45</context>
         </context-group>
+        <target>小于</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.biggerthan" datatype="html">
+        <source>bigger than</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
-          <context context-type="linenumber">41</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">50</context>
         </context-group>
+        <target>大于</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.lessequalthan" datatype="html">
+        <source>less equal than</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
-          <context context-type="linenumber">76</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">55</context>
         </context-group>
+        <target>小于等于</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.biggerequalthan" datatype="html">
+        <source>bigger equal than</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
-          <context context-type="linenumber">37,38</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">60</context>
         </context-group>
+        <target>大于等于</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.isoneof" datatype="html">
+        <source>is one of</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
-          <context context-type="linenumber">93,94</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">65</context>
         </context-group>
+        <target>属于</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.notoneof" datatype="html">
+        <source>not one of</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
-          <context context-type="linenumber">25</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">70</context>
         </context-group>
+        <target>不属于</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.contains" datatype="html">
+        <source>contains</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">75</context>
         </context-group>
+        <target>包含</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.notcontain" datatype="html">
+        <source>not contain</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
-          <context context-type="linenumber">55</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">80</context>
         </context-group>
+        <target>不包含</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.startwith" datatype="html">
+        <source>start with</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
-          <context context-type="linenumber">148</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">85</context>
         </context-group>
+        <target>以指定字符串开头</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.endswith" datatype="html">
+        <source>ends with</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
-          <context context-type="linenumber">150</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">90</context>
         </context-group>
+        <target>以指定字符串结尾</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.matchregex" datatype="html">
+        <source>match regex</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/setting/setting.component.html</context>
-          <context context-type="linenumber">10</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">95</context>
         </context-group>
+        <target>正则匹配</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.operators.notmatchregex" datatype="html">
+        <source>not match regex</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/setting/setting.component.html</context>
-          <context context-type="linenumber">17</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/ruleConfig.ts</context>
+          <context context-type="linenumber">100</context>
         </context-group>
+        <target>正则不匹配</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.if" datatype="html">
+        <source>If</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
-          <context context-type="linenumber">27</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">2</context>
         </context-group>
+        <target>如果</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.and" datatype="html">
+        <source>and</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/groups/index/index.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">4</context>
         </context-group>
+        <target>并且</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.selectuserproperty" datatype="html">
+        <source>Select property</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/groups/groups.component.html</context>
-          <context context-type="linenumber">27</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">7</context>
         </context-group>
+        <target>选择用户属性</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.selectcondition" datatype="html">
+        <source>condition</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/setting/setting.component.html</context>
-          <context context-type="linenumber">10</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">14</context>
         </context-group>
+        <target>选择条件</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.selectvalues" datatype="html">
+        <source>values</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/setting/setting.component.html</context>
-          <context context-type="linenumber">17</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">25</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
-          <context context-type="linenumber">28</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">59</context>
         </context-group>
+        <target>请选择备选值</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.pleaseinput" datatype="html">
+        <source>input string or number</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">38</context>
         </context-group>
+        <target>请输入</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.inputnumber" datatype="html">
+        <source>input a number</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
-          <context context-type="linenumber">27</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">45</context>
         </context-group>
+        <target>请输入数字</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.segments" datatype="html">
+        <source>segments</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">10</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">79</context>
         </context-group>
+        <target>请选择用户组</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.rule.alloptions" datatype="html">
+        <source>total options</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/rule/rule.component.html</context>
+          <context context-type="linenumber">106</context>
         </context-group>
+        <target>所有选项数</target>
+      </trans-unit>
+      <trans-unit id="core.components.findrule.serve" datatype="html">
+        <source>serve</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
-          <context context-type="linenumber">15</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/serve-multistates/serve-multistates.component.html</context>
+          <context context-type="linenumber">3</context>
         </context-group>
+        <target>返回</target>
+      </trans-unit>
+      <trans-unit id="app.components.findrule.selectvariation" datatype="html">
+        <source>variation</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
-          <context context-type="linenumber">30</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/serve-multistates/serve-multistates.component.html</context>
+          <context context-type="linenumber">6</context>
         </context-group>
+        <target>选择返回值</target>
+      </trans-unit>
+      <trans-unit id="app.components.findrule.rolloutpercentage" datatype="html">
+        <source>Rollout percentage</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
-          <context context-type="linenumber">62</context>
+          <context context-type="sourcefile">src/app/core/components/find-rule/serve-multistates/serve-multistates.component.html</context>
+          <context context-type="linenumber">11</context>
         </context-group>
+        <target>百分比匹配</target>
+      </trans-unit>
+      <trans-unit id="iam.groups.group-drawer.title" datatype="html">
+        <source>Add group</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/users/details/details.component.html</context>
-          <context context-type="linenumber">17</context>
+          <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
+          <context context-type="linenumber">7</context>
         </context-group>
+        <target>添加组</target>
       </trans-unit>
       <trans-unit id="common.validating" datatype="html">
         <source>Validating...</source>
-        <target>校验中...</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
           <context context-type="linenumber">15</context>
@@ -514,26 +703,26 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">63</context>
         </context-group>
+        <target>校验中...</target>
       </trans-unit>
       <trans-unit id="iam.groups.group-drawer.group-name-cannot-be-empty" datatype="html">
         <source>Group name cannot be empty</source>
-        <target>组名称不可为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
           <context context-type="linenumber">18</context>
         </context-group>
+        <target>组名称不可为空</target>
       </trans-unit>
       <trans-unit id="iam.groups.group-drawer.group-name-unavailable" datatype="html">
         <source>This group name is not available</source>
-        <target>该名称已被使用</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
           <context context-type="linenumber">19</context>
         </context-group>
+        <target>该名称已被使用</target>
       </trans-unit>
       <trans-unit id="common.description" datatype="html">
         <source>Description</source>
-        <target>描述</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.html</context>
           <context context-type="linenumber">26</context>
@@ -594,6 +783,14 @@
           <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
           <context context-type="linenumber">31</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
+          <context context-type="linenumber">32</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
+          <context context-type="linenumber">26</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
           <context context-type="linenumber">25</context>
@@ -606,17 +803,17 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">76</context>
         </context-group>
+        <target>描述</target>
       </trans-unit>
       <trans-unit id="common.operation-success" datatype="html">
         <source>Operation succeeded</source>
-        <target>操作成功</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/group-drawer/group-drawer.component.ts</context>
           <context context-type="linenumber">68</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.ts</context>
-          <context context-type="linenumber">133</context>
+          <context context-type="linenumber">117</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.ts</context>
@@ -778,210 +975,154 @@
           <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.ts</context>
           <context context-type="linenumber">99</context>
         </context-group>
+        <target>操作成功</target>
       </trans-unit>
       <trans-unit id="4081990841785642590" datatype="html">
         <source>Change environment</source>
-        <target>切换项目环境</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/header/header.component.html</context>
           <context context-type="linenumber">44</context>
         </context-group>
+        <target>切换项目环境</target>
       </trans-unit>
       <trans-unit id="7091571651222742304" datatype="html">
         <source>Projects</source>
-        <target>项目</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/header/header.component.html</context>
           <context context-type="linenumber">57</context>
         </context-group>
+        <target>项目</target>
       </trans-unit>
       <trans-unit id="7466516352172806111" datatype="html">
         <source>Environments</source>
-        <target>环境</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/header/header.component.html</context>
           <context context-type="linenumber">68</context>
         </context-group>
+        <target>环境</target>
       </trans-unit>
       <trans-unit id="2159130950882492111" datatype="html">
         <source>Cancel</source>
-        <target>取消</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/header/header.component.html</context>
           <context context-type="linenumber">74</context>
         </context-group>
+        <target>取消</target>
       </trans-unit>
       <trans-unit id="8998179362936748717" datatype="html">
         <source>OK</source>
-        <target>OK</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/header/header.component.html</context>
           <context context-type="linenumber">75</context>
         </context-group>
+        <target>OK</target>
       </trans-unit>
       <trans-unit id="7371988988136572417" datatype="html">
         <source>You don&apos;t have permissions to read project list, please contact the admin to grant you the necessary permissions</source>
-        <target>您没有查看项目列表的权限， 请联系账户管理员添加相关权限</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/header/header.component.ts</context>
           <context context-type="linenumber">50</context>
         </context-group>
+        <target>您没有查看项目列表的权限， 请联系账户管理员添加相关权限</target>
       </trans-unit>
       <trans-unit id="5850481742796290933" datatype="html">
         <source>You don&apos;t have permissions to read environment list, please contact the admin to grant you the necessary permissions</source>
-        <target>您没有查看该环境列表的权限， 请联系账户管理员添加相关权限</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/header/header.component.ts</context>
           <context context-type="linenumber">51</context>
         </context-group>
+        <target>您没有查看该环境列表的权限， 请联系账户管理员添加相关权限</target>
       </trans-unit>
       <trans-unit id="1576196702830193597" datatype="html">
         <source>You don&apos;t have permissions to read project and environment list, please contact the admin to grant you the necessary permissions</source>
-        <target>您没有查看项目环境列表的权限， 请联系账户管理员添加相关权限</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/header/header.component.ts</context>
           <context context-type="linenumber">51</context>
         </context-group>
+        <target>您没有查看项目环境列表的权限， 请联系账户管理员添加相关权限</target>
       </trans-unit>
       <trans-unit id="iam.team.member-drawer.title" datatype="html">
         <source>Add team member</source>
-        <target>添加成员</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
           <context context-type="linenumber">7</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.invitation-mode" datatype="html">
-        <source>Invitation mode</source>
-        <target>邀请方式</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">13</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.mobile" datatype="html">
-        <source>Mobile</source>
-        <target>电话</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">16</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">24</context>
-        </context-group>
+        <target>添加成员</target>
       </trans-unit>
       <trans-unit id="iam.team.member-drawer.email" datatype="html">
         <source>Email</source>
-        <target>Email</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">17</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">32</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.invalid-mobile" datatype="html">
-        <source>Invalid mobile number</source>
-        <target>请输入有效的手机号</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">25</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.mobile-placeholder" datatype="html">
-        <source>Mobile number</source>
-        <target>电话</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">26</context>
+          <context context-type="linenumber">14</context>
         </context-group>
+        <target>Email</target>
       </trans-unit>
       <trans-unit id="iam.team.member-drawer.invalid-email" datatype="html">
         <source>Invalid Email</source>
-        <target>请输入有效的邮箱</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="linenumber">15</context>
         </context-group>
+        <target>请输入有效的邮箱</target>
       </trans-unit>
       <trans-unit id="iam.team.member-drawer.email-placeholder" datatype="html">
         <source>Email</source>
-        <target>邮箱</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">34</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.name" datatype="html">
-        <source>Name</source>
-        <target>名称</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">40</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.member-drawer.name-placeholder" datatype="html">
-        <source>Name</source>
-        <target>名称</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">42</context>
+          <context context-type="linenumber">16</context>
         </context-group>
+        <target>邮箱</target>
       </trans-unit>
       <trans-unit id="iam.team.member-drawer.permissions" datatype="html">
         <source>Permissions</source>
-        <target>权限</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">47</context>
+          <context context-type="linenumber">29</context>
         </context-group>
+        <target>权限</target>
       </trans-unit>
       <trans-unit id="iam.team.member-drawer.policy-group-set-at-least-one" datatype="html">
         <source>(Policy and group cannot be both empty)</source>
-        <target>（策略和组不可同时为空）</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/member-drawer/member-drawer.component.html</context>
-          <context context-type="linenumber">47</context>
+          <context context-type="linenumber">29</context>
         </context-group>
+        <target>（策略和组不可同时为空）</target>
       </trans-unit>
       <trans-unit id="4086606389696938932" datatype="html">
         <source>Account</source>
-        <target>账户管理</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/menu/menu.component.html</context>
           <context context-type="linenumber">86</context>
         </context-group>
+        <target>账户管理</target>
       </trans-unit>
       <trans-unit id="4915431133669985304" datatype="html">
         <source>Profile</source>
-        <target>个人信息</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/menu/menu.component.html</context>
           <context context-type="linenumber">99</context>
         </context-group>
+        <target>个人信息</target>
       </trans-unit>
       <trans-unit id="3797778920049399855" datatype="html">
         <source>Logout</source>
-        <target>退出登录</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/menu/menu.component.html</context>
           <context context-type="linenumber">103</context>
         </context-group>
+        <target>退出登录</target>
       </trans-unit>
       <trans-unit id="expt.metric.name-cannot-be-empty" datatype="html">
         <source>Metric name cannot be empty</source>
-        <target>Metric 名称不能为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">13</context>
         </context-group>
+        <target>Metric 名称不能为空</target>
       </trans-unit>
       <trans-unit id="expt.metric.maintainer" datatype="html">
         <source>Maintainer</source>
-        <target>维护人</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">24</context>
@@ -990,34 +1131,34 @@
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.html</context>
           <context context-type="linenumber">37</context>
         </context-group>
+        <target>维护人</target>
       </trans-unit>
       <trans-unit id="expt.metric.maintainer-cannot-be-empty" datatype="html">
         <source>Maintainer cannot be empty</source>
-        <target>维护人不能为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">25</context>
         </context-group>
+        <target>维护人不能为空</target>
       </trans-unit>
       <trans-unit id="expt.metric.select-maintainer" datatype="html">
         <source>Select maintainer</source>
-        <target>选择维护人</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">28</context>
         </context-group>
+        <target>选择维护人</target>
       </trans-unit>
       <trans-unit id="expt.metric.event-info" datatype="html">
         <source>Event information</source>
-        <target>事件相关信息</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">48</context>
         </context-group>
+        <target>事件相关信息</target>
       </trans-unit>
       <trans-unit id="expt.overview.event-type" datatype="html">
         <source>Event type</source>
-        <target>事件类型</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">50</context>
@@ -1026,26 +1167,26 @@
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">63</context>
         </context-group>
+        <target>事件类型</target>
       </trans-unit>
       <trans-unit id="expt.overview.event-type-cannot-be-empty" datatype="html">
         <source>Event type cannot be empty</source>
-        <target>事件类型不能为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">51</context>
         </context-group>
+        <target>事件类型不能为空</target>
       </trans-unit>
       <trans-unit id="expt.metric.target-selector" datatype="html">
         <source>One or more CSS selector, seperated by (,)</source>
-        <target>一个或多个 CSS selector，中间用逗号(,)隔开，请确保不要使用中文逗号！</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">65</context>
         </context-group>
+        <target>一个或多个 CSS selector，中间用逗号(,)隔开，请确保不要使用中文逗号！</target>
       </trans-unit>
       <trans-unit id="expt.metric.targeting-page-url" datatype="html">
         <source>Targeting page URL</source>
-        <target>目标页面地址</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">70</context>
@@ -1054,18 +1195,18 @@
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">81</context>
         </context-group>
+        <target>目标页面地址</target>
       </trans-unit>
       <trans-unit id="expt.metric.string-including" datatype="html">
         <source>String including</source>
-        <target>字符串包含</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">79</context>
         </context-group>
+        <target>字符串包含</target>
       </trans-unit>
       <trans-unit id="common.conversion" datatype="html">
         <source>Conversion</source>
-        <target>转化率</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">91</context>
@@ -1094,10 +1235,10 @@
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">94</context>
         </context-group>
+        <target>转化率</target>
       </trans-unit>
       <trans-unit id="common.numeric" datatype="html">
         <source>Numeric</source>
-        <target>数值</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">92</context>
@@ -1110,18 +1251,18 @@
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">88</context>
         </context-group>
+        <target>数值</target>
       </trans-unit>
       <trans-unit id="expt.metric.to-get-accurate-result-send-value-for-numeric" datatype="html">
         <source>To obtain a accurate result, a numeraic value must be sent for numeric experiment</source>
-        <target>为了获得精确结果，数值型的实验要求在埋点时必须发送一个数值</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">97</context>
         </context-group>
+        <target>为了获得精确结果，数值型的实验要求在埋点时必须发送一个数值</target>
       </trans-unit>
       <trans-unit id="expt.metric.event-name" datatype="html">
         <source>Event name</source>
-        <target>事件名称</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">101</context>
@@ -1134,50 +1275,50 @@
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.html</context>
           <context context-type="linenumber">36</context>
         </context-group>
+        <target>事件名称</target>
       </trans-unit>
       <trans-unit id="expt.metric.event-name-cannot-be-empty" datatype="html">
         <source>Event name cannot be empty</source>
-        <target>事件名称不能为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">102</context>
         </context-group>
+        <target>事件名称不能为空</target>
       </trans-unit>
       <trans-unit id="expt.metric.used-by-code" datatype="html">
         <source>Used by code</source>
-        <target>在代码中埋点时使用该事件名称</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">105</context>
         </context-group>
+        <target>在代码中埋点时使用该事件名称</target>
       </trans-unit>
       <trans-unit id="expt.metric.unit" datatype="html">
         <source>Unit</source>
-        <target>计量单位</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">108</context>
         </context-group>
+        <target>计量单位</target>
       </trans-unit>
       <trans-unit id="expt.metric.unit-cannot-be-empty" datatype="html">
         <source>Unit cannot be empty</source>
-        <target>计量单位不能为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">109</context>
         </context-group>
+        <target>计量单位不能为空</target>
       </trans-unit>
       <trans-unit id="expt.metric.unit-exemple" datatype="html">
         <source>ms, $, kg etc.</source>
-        <target>毫秒，美元，千克等</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">110</context>
         </context-group>
+        <target>毫秒，美元，千克等</target>
       </trans-unit>
       <trans-unit id="expt.metric.winning-criteria" datatype="html">
         <source>Winning criteria</source>
-        <target>实验胜出标准</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">114</context>
@@ -1186,26 +1327,26 @@
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">115</context>
         </context-group>
+        <target>实验胜出标准</target>
       </trans-unit>
       <trans-unit id="expt.metric.higher-than-baseline" datatype="html">
         <source>Higher than baseline</source>
-        <target>高于基准值</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">117</context>
         </context-group>
+        <target>高于基准值</target>
       </trans-unit>
       <trans-unit id="expt.metric.lower-than-baseline" datatype="html">
         <source>Lower than baseline</source>
-        <target>低于基准值</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.html</context>
           <context context-type="linenumber">118</context>
         </context-group>
+        <target>低于基准值</target>
       </trans-unit>
       <trans-unit id="common.operation-failed-try-again" datatype="html">
         <source>Operation failed, please try again</source>
-        <target>操作失败，请重试</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/metric-drawer/metric-drawer.component.ts</context>
           <context context-type="linenumber">240</context>
@@ -1222,110 +1363,122 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">317</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/onboarding/steps/steps.component.ts</context>
+          <context context-type="linenumber">63</context>
+        </context-group>
+        <target>操作失败，请重试</target>
+      </trans-unit>
+      <trans-unit id="org.org.createOrg" datatype="html">
+        <source>Create organization</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <target>创建机构</target>
+      </trans-unit>
+      <trans-unit id="org.org.orgMandatory" datatype="html">
+        <source>Organization name is mandatory!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.html</context>
+          <context context-type="linenumber">14</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">6</context>
+        </context-group>
+        <target>机构名称不能为空</target>
+      </trans-unit>
+      <trans-unit id="org.org.orgCreated" datatype="html">
+        <source>Organization successfully created!</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/core/components/organization-drawer/organization-drawer.component.ts</context>
+          <context context-type="linenumber">60</context>
+        </context-group>
+        <target>机构创建成功</target>
       </trans-unit>
       <trans-unit id="iam.policies.policy-drawer.title" datatype="html">
         <source>Add policy</source>
-        <target>添加策略</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
           <context context-type="linenumber">7</context>
         </context-group>
+        <target>添加策略</target>
       </trans-unit>
       <trans-unit id="iam.policies.policy-drawer.policy-name-cannot-be-empty" datatype="html">
         <source>Policy name cannot be empty</source>
-        <target>策略名不可为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
           <context context-type="linenumber">19</context>
         </context-group>
+        <target>策略名不可为空</target>
       </trans-unit>
       <trans-unit id="iam.policies.policy-drawer.policy-name-unavailable" datatype="html">
         <source>This policy name is not available</source>
-        <target>该名称不可用</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/policy-drawer/policy-drawer.component.html</context>
           <context context-type="linenumber">20</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.projectName" datatype="html">
-        <source>Project name</source>
-        <target>项目名称</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
-          <context context-type="linenumber">23</context>
-        </context-group>
+        <target>该名称不可用</target>
       </trans-unit>
       <trans-unit id="org.project.projectNameMandatory" datatype="html">
         <source>Project name is mandatory!</source>
-        <target>项目名称不能为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
           <context context-type="linenumber">24</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.projectNamePlaceholder" datatype="html">
-        <source>Project name</source>
-        <target>项目名称</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.html</context>
-          <context context-type="linenumber">25</context>
-        </context-group>
+        <target>项目名称不能为空</target>
       </trans-unit>
       <trans-unit id="org.project.editProject" datatype="html">
         <source>Edit project</source>
-        <target>编辑项目</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.ts</context>
           <context context-type="linenumber">30</context>
         </context-group>
+        <target>编辑项目</target>
       </trans-unit>
       <trans-unit id="org.project.addProject" datatype="html">
         <source>Add project</source>
-        <target>添加项目</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.ts</context>
           <context context-type="linenumber">33</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">12</context>
-        </context-group>
+        <target>添加项目</target>
       </trans-unit>
       <trans-unit id="org.project.projectUpdateSuccess" datatype="html">
         <source>Project successfully updated</source>
-        <target>项目更新成功</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.ts</context>
           <context context-type="linenumber">113</context>
         </context-group>
+        <target>项目更新成功</target>
       </trans-unit>
       <trans-unit id="org.project.projectCreateSuccess" datatype="html">
         <source>Project successfully created</source>
-        <target>项目创建成功</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/project-drawer/project-drawer.component.ts</context>
           <context context-type="linenumber">126</context>
         </context-group>
+        <target>项目创建成功</target>
       </trans-unit>
       <trans-unit id="users.idx.customized-user-properties" datatype="html">
         <source>Customized user properties</source>
-        <target>用户自定义属性</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">6</context>
         </context-group>
+        <target>用户自定义属性</target>
       </trans-unit>
       <trans-unit id="users.user-properties" datatype="html">
         <source>User properties</source>
-        <target>用户属性</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">13</context>
         </context-group>
+        <target>用户属性</target>
       </trans-unit>
       <trans-unit id="common.filter-by-name" datatype="html">
         <source>Filter by name</source>
-        <target>按名称查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">18</context>
@@ -1342,10 +1495,10 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-view.component.ts</context>
           <context context-type="linenumber">88</context>
         </context-group>
+        <target>按名称查找</target>
       </trans-unit>
       <trans-unit id="common.add" datatype="html">
         <source>Add</source>
-        <target>添加</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">27</context>
@@ -1378,6 +1531,10 @@
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
           <context context-type="linenumber">55</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
           <context context-type="linenumber">61</context>
@@ -1386,30 +1543,38 @@
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
           <context context-type="linenumber">54</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">12</context>
         </context-group>
+        <target>添加</target>
       </trans-unit>
       <trans-unit id="users.idx.mark-as-digest-field" datatype="html">
         <source>Mark as digest field</source>
-        <target>标记为摘要字段</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">43</context>
         </context-group>
+        <target>标记为摘要字段</target>
       </trans-unit>
       <trans-unit id="users.idx.used-to-display-user-digest-info" datatype="html">
         <source>Used to display user&apos;s digest information</source>
-        <target>用于显示用户摘要信息</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">44</context>
         </context-group>
+        <target>用于显示用户摘要信息</target>
       </trans-unit>
       <trans-unit id="common.comment" datatype="html">
         <source>Comment</source>
-        <target>备注</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">46</context>
@@ -1422,10 +1587,10 @@
           <context context-type="sourcefile">src/app/features/safe/users/details/details.component.html</context>
           <context context-type="linenumber">19</context>
         </context-group>
+        <target>备注</target>
       </trans-unit>
       <trans-unit id="common.actions" datatype="html">
         <source>Actions</source>
-        <target>操作</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">47</context>
@@ -1506,26 +1671,26 @@
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">112</context>
         </context-group>
+        <target>操作</target>
       </trans-unit>
       <trans-unit id="users.idx.built-in-property" datatype="html">
         <source>Built in property</source>
-        <target>内置属性</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">59</context>
         </context-group>
+        <target>内置属性</target>
       </trans-unit>
       <trans-unit id="users.idx.click-to-edit-set-comment" datatype="html">
         <source>Click to set/modify comment</source>
-        <target>点击设置/修改备注</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">70</context>
         </context-group>
+        <target>点击设置/修改备注</target>
       </trans-unit>
       <trans-unit id="common.remove-confirm" datatype="html">
-        <source>Can not be recovered, are you sure to remove it?</source>
-        <target>删除后不可恢复，确定要删除么？</target>
+        <source>This operation cannot be reverted, are you sure to remove it?</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">96</context>
@@ -1534,14 +1699,6 @@
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">200</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">54</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">77</context>
-        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">89</context>
@@ -1580,16 +1737,24 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">42</context>
+          <context context-type="linenumber">38</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">67</context>
+          <context context-type="linenumber">70</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">52</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">75</context>
         </context-group>
+        <target>删除后不可恢复，确定要删除么？</target>
       </trans-unit>
       <trans-unit id="common.remove" datatype="html">
         <source>Remove</source>
-        <target>移除</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">97</context>
@@ -1644,11 +1809,19 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">47</context>
+          <context context-type="linenumber">43</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">71</context>
+          <context context-type="linenumber">74</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">55</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">79</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
@@ -1662,10 +1835,10 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">123</context>
         </context-group>
+        <target>移除</target>
       </trans-unit>
       <trans-unit id="common.cancel" datatype="html">
         <source>Cancel</source>
-        <target>取消</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">105</context>
@@ -1678,6 +1851,10 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">169,170</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">171</context>
+        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">169</context>
@@ -1698,70 +1875,71 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">120</context>
         </context-group>
+        <target>取消</target>
       </trans-unit>
       <trans-unit id="users.idx.preset-value" datatype="html">
         <source>Preset value</source>
-        <target>预定义值</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">111</context>
         </context-group>
+        <target>预定义值</target>
       </trans-unit>
       <trans-unit id="users.idx.user-tags" datatype="html">
         <source>User tags</source>
-        <target>用户标签</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">122</context>
         </context-group>
+        <target>用户标签</target>
       </trans-unit>
       <trans-unit id="users.idx.request-field" datatype="html">
         <source>Request field</source>
-        <target>请求字段名</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">139</context>
         </context-group>
+        <target>请求字段名</target>
       </trans-unit>
       <trans-unit id="users.idx.source" datatype="html">
         <source>Source</source>
-        <target>来源</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">140</context>
         </context-group>
+        <target>来源</target>
       </trans-unit>
       <trans-unit id="users.idx.user-property" datatype="html">
         <source>User property</source>
-        <target>用户属性</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">141</context>
         </context-group>
+        <target>用户属性</target>
       </trans-unit>
       <trans-unit id="common.set" datatype="html">
         <source>Set</source>
-        <target>设置</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">227</context>
         </context-group>
+        <target>设置</target>
       </trans-unit>
       <trans-unit id="users.idx.of-preset-values" datatype="html">
-        <source>&apos;s preset values</source>的预定义值
-        <target>的预定义值</target>
+        <source>&apos;s preset values</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">227</context>
         </context-group>
+        <target>的预定义值</target>
       </trans-unit>
       <trans-unit id="users.idx.used-to-match-rules" datatype="html">
         <source>(Used to match rules)</source>
-        <target>(参与规则判断)</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">233</context>
         </context-group>
+        <target>(参与规则判断)</target>
       </trans-unit>
       <trans-unit id="users.idx.used-by-ui" datatype="html">
         <source>(Used by the UI)</source>
@@ -1772,23 +1950,22 @@
       </trans-unit>
       <trans-unit id="uses.idx-force-user-to-use" datatype="html">
         <source>Force user to select from preset valus when using</source>
-        <target>要求用户在规则中使用</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">258</context>
         </context-group>
+        <target>要求用户在规则中使用</target>
       </trans-unit>
       <trans-unit id="users.idx.once-saved-be-causion" datatype="html">
         <source>Once saved, the value used by rules of feature flag or segment but not in above list, would still be kept there, but if it is removed from the rule, you cannot select it again.</source>
-        <target>勾选并保存后之前在开关或用户组自定义规则中已经使用的但不在上边列表中的值仍然会被保留， 但是一旦该值被从规则中移除后将不能被重新选中，请谨慎操作</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.html</context>
           <context context-type="linenumber">259</context>
         </context-group>
+        <target>勾选并保存后之前在开关或用户组自定义规则中已经使用的但不在上边列表中的值仍然会被保留， 但是一旦该值被从规则中移除后将不能被重新选中，请谨慎操作</target>
       </trans-unit>
       <trans-unit id="common.operation-failed" datatype="html">
         <source>Operation failed</source>
-        <target>操作失败</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.ts</context>
           <context context-type="linenumber">92</context>
@@ -1913,10 +2090,10 @@
           <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.ts</context>
           <context context-type="linenumber">99</context>
         </context-group>
+        <target>操作失败</target>
       </trans-unit>
       <trans-unit id="users.add-property" datatype="html">
-        <source>Create property </source>
-        <target>新建属性</target>
+        <source>Create property</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.ts</context>
           <context context-type="linenumber">111</context>
@@ -1929,34 +2106,34 @@
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.ts</context>
           <context context-type="linenumber">149</context>
         </context-group>
+        <target>新建属性</target>
       </trans-unit>
       <trans-unit id="users.property-name-cannot-be-empty" datatype="html">
         <source>Property name cannot be empty</source>
-        <target>属性名不能为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.ts</context>
           <context context-type="linenumber">200</context>
         </context-group>
+        <target>属性名不能为空</target>
       </trans-unit>
       <trans-unit id="users.property-unavailable" datatype="html">
         <source>Property exists</source>
-        <target>属性已存在</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/props-drawer/props-drawer.component.ts</context>
           <context context-type="linenumber">205</context>
         </context-group>
+        <target>属性已存在</target>
       </trans-unit>
       <trans-unit id="common.num-users" datatype="html">
         <source>user(s)</source>
-        <target>个用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/target-user/target-user.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
+        <target>个用户</target>
       </trans-unit>
       <trans-unit id="common.click-to-edit" datatype="html">
         <source>Click to edit</source>
-        <target>点击编辑</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/target-user/target-user.component.html</context>
           <context context-type="linenumber">11</context>
@@ -1965,34 +2142,34 @@
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
           <context context-type="linenumber">13</context>
         </context-group>
+        <target>点击编辑</target>
       </trans-unit>
       <trans-unit id="target-user.select-targeting-users" datatype="html">
         <source>Select targeting users</source>
-        <target>请选择目标用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/target-user/target-user.component.html</context>
           <context context-type="linenumber">20</context>
         </context-group>
+        <target>请选择目标用户</target>
       </trans-unit>
       <trans-unit id="common.new-user" datatype="html">
         <source>Create user</source>
-        <target>新建用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/target-user/target-user.component.html</context>
           <context context-type="linenumber">37</context>
         </context-group>
+        <target>新建用户</target>
       </trans-unit>
       <trans-unit id="common.edit-targeting-user" datatype="html">
         <source>Edit targeting user</source>
-        <target>编辑目标用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/target-user/target-user.component.html</context>
           <context context-type="linenumber">54</context>
         </context-group>
+        <target>编辑目标用户</target>
       </trans-unit>
       <trans-unit id="upload" datatype="html">
         <source>Upload</source>
-        <target>上传</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/upload-drawer/upload-drawer.component.html</context>
           <context context-type="linenumber">4</context>
@@ -2001,66 +2178,66 @@
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">21</context>
         </context-group>
+        <target>上传</target>
       </trans-unit>
       <trans-unit id="Uploading" datatype="html">
         <source>Uploading...</source>
-        <target>上传中...</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/upload-drawer/upload-drawer.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
+        <target>上传中...</target>
       </trans-unit>
       <trans-unit id="data-upload-warning" datatype="html">
         <source>To users, only insert/update operations will be applied; To user properties, only insert operation would be applied.</source>
-        <target>在数据同步时，对于开关用户数据，仅做新增/更新操作；对于开关用户属性，仅做新增操作。</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/upload-drawer/upload-drawer.component.html</context>
           <context context-type="linenumber">17</context>
         </context-group>
+        <target>在数据同步时，对于开关用户数据，仅做新增/更新操作；对于开关用户属性，仅做新增操作。</target>
       </trans-unit>
       <trans-unit id="select-file-to-upload" datatype="html">
         <source>Please select the file to upload (only support JSON file).</source>
-        <target>请选择要上传的文件（仅支持 JSON 文件）</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/upload-drawer/upload-drawer.component.html</context>
           <context context-type="linenumber">22</context>
         </context-group>
+        <target>请选择要上传的文件（仅支持 JSON 文件）</target>
       </trans-unit>
       <trans-unit id="check-template" datatype="html">
         <source>Click to view the template</source>
-        <target>点击查看模板</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/upload-drawer/upload-drawer.component.html</context>
           <context context-type="linenumber">23</context>
         </context-group>
+        <target>点击查看模板</target>
       </trans-unit>
       <trans-unit id="select-upload-file" datatype="html">
         <source>Select and upload file</source>
-        <target>选择并上传文件</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/upload-drawer/upload-drawer.component.html</context>
           <context context-type="linenumber">32</context>
         </context-group>
+        <target>选择并上传文件</target>
       </trans-unit>
       <trans-unit id="upload-failed" datatype="html">
         <source>upload failed</source>
-        <target>上传失败</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/upload-drawer/upload-drawer.component.ts</context>
           <context context-type="linenumber">41</context>
         </context-group>
+        <target>上传失败</target>
       </trans-unit>
       <trans-unit id="upload-success" datatype="html">
         <source>upload success</source>
-        <target>上传成功</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/upload-drawer/upload-drawer.component.ts</context>
           <context context-type="linenumber">46</context>
         </context-group>
+        <target>上传成功</target>
       </trans-unit>
       <trans-unit id="users.idx.ff-segments" datatype="html">
         <source>Feature flags and segments</source>
-        <target>开关和用户组：</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
           <context context-type="linenumber">10</context>
@@ -2069,34 +2246,34 @@
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">125</context>
         </context-group>
+        <target>开关和用户组：</target>
       </trans-unit>
       <trans-unit id="common.feature-flag" datatype="html">
         <source>Feature flag</source>
-        <target>开关</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
           <context context-type="linenumber">13,14</context>
         </context-group>
+        <target>开关</target>
       </trans-unit>
       <trans-unit id="users.idx.filter-by-name-or-keyname" datatype="html">
         <source>Filter by name or keyName</source>
-        <target>按名称或 keyName 查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
           <context context-type="linenumber">18</context>
         </context-group>
+        <target>按名称或 keyName 查找</target>
       </trans-unit>
       <trans-unit id="common.variation" datatype="html">
         <source>Variation</source>
-        <target>返回值</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
           <context context-type="linenumber">39,40</context>
         </context-group>
+        <target>返回值</target>
       </trans-unit>
       <trans-unit id="common.details" datatype="html">
         <source>Details</source>
-        <target>详情</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
           <context context-type="linenumber">60,62</context>
@@ -2147,7 +2324,7 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">64</context>
+          <context context-type="linenumber">67</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
@@ -2157,18 +2334,18 @@
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">127</context>
         </context-group>
+        <target>详情</target>
       </trans-unit>
       <trans-unit id="common.segments" datatype="html">
         <source>Segments</source>
-        <target>用户组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
           <context context-type="linenumber">69,70</context>
         </context-group>
+        <target>用户组</target>
       </trans-unit>
       <trans-unit id="common.last-updated" datatype="html">
         <source>Last updated</source>
-        <target>更新于</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
           <context context-type="linenumber">94,95</context>
@@ -2181,10 +2358,10 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">31</context>
         </context-group>
+        <target>更新于</target>
       </trans-unit>
       <trans-unit id="common.format" datatype="html">
         <source>Format</source>
-        <target>格式化</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
           <context context-type="linenumber">137,139</context>
@@ -2193,10 +2370,10 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">165,167</context>
         </context-group>
+        <target>格式化</target>
       </trans-unit>
       <trans-unit id="common.close" datatype="html">
         <source>Close</source>
-        <target>关闭</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.html</context>
           <context context-type="linenumber">139,141</context>
@@ -2205,18 +2382,14 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">168,169</context>
         </context-group>
+        <target>关闭</target>
       </trans-unit>
       <trans-unit id="common.copy-success" datatype="html">
         <source>Copied</source>
-        <target>复制成功</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/core/components/user-segments-flags-drawer/user-segments-flags-drawer.component.ts</context>
           <context context-type="linenumber">43</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.ts</context>
-          <context context-type="linenumber">175</context>
-        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">39</context>
@@ -2248,323 +2421,163 @@
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.ts</context>
           <context context-type="linenumber">88</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.ts</context>
-          <context context-type="linenumber">64</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.ts</context>
-          <context context-type="linenumber">92</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="2454050363478003966" datatype="html">
-        <source>Login</source>
-        <target>登录</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
-          <context context-type="linenumber">3</context>
-        </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
-          <context context-type="linenumber">39,40</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="193324215946023286" datatype="html">
-        <source>username</source>
-        <target>用户名</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
-          <context context-type="linenumber">7,8</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="8056544210376488" datatype="html">
-        <source>username is mandatory</source>
-        <target>请输入用户名</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
-          <context context-type="linenumber">13</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="5908006480861982585" datatype="html">
-        <source>Illegal username</source>
-        <target>非法用户名</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
-          <context context-type="linenumber">14</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="4267710907648326582" datatype="html">
-        <source>password is mandatory</source>
-        <target>请输入密码</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
-          <context context-type="linenumber">19,20</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="4809196861118879526" datatype="html">
-        <source>password</source>
-        <target>密码</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
-          <context context-type="linenumber">26,27</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="4322589063241191419" datatype="html">
-        <source>username and/or password incorrect</source>
-        <target>用户名和密码错误</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.ts</context>
-          <context context-type="linenumber">58</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="3427095830950090423" datatype="html">
-        <source>Login with success</source>
-        <target>登录成功</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.ts</context>
-          <context context-type="linenumber">63</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="1294601887930644953" datatype="html">
-        <source>Error occurred, please contact the support.</source>
-        <target>服务错误，请联系运营人员。</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.ts</context>
-          <context context-type="linenumber">69</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.tabtitle" datatype="html">
-        <source>Organization</source>
-        <target>机构</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account-settings.component.html</context>
-          <context context-type="linenumber">4</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.project.tabtitle" datatype="html">
-        <source>Projects</source>
-        <target>项目</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account-settings.component.html</context>
-          <context context-type="linenumber">11</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.tabtitle" datatype="html">
-        <source>Profile</source>
-        <target>个人信息</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account-settings.component.html</context>
-          <context context-type="linenumber">18</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.updateOrgName" datatype="html">
-        <source>Update organization name</source>
-        <target>更新机构名称</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">17</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.switchorg" datatype="html">
-        <source>Switch organization</source>
-        <target>切换机构</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">22</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.selectOrg" datatype="html">
-        <source>Select organization</source>
-        <target>选择机构</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.html</context>
-          <context context-type="linenumber">24</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.org.orgNameUpdateSuccess" datatype="html">
-        <source>Organization name updated!</source>
-        <target>机构名称更新成功！</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/account/account.component.ts</context>
-          <context context-type="linenumber">91</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.email" datatype="html">
-        <source>Email</source>
-        <target>邮箱</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">4</context>
-        </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.emailMandatory" datatype="html">
-        <source>Email is mandatory!</source>
-        <target>邮箱不能为空</target>
+        </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">5</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.ts</context>
+          <context context-type="linenumber">64</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.emailPlaceholder" datatype="html">
-        <source>Email</source>
-        <target>邮箱</target>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">7</context>
+          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.ts</context>
+          <context context-type="linenumber">92</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="org.profile.mobile" datatype="html">
-        <source>Mobile</source>
-        <target>手机号</target>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">15</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.ts</context>
+          <context context-type="linenumber">175</context>
         </context-group>
+        <target>复制成功</target>
       </trans-unit>
-      <trans-unit id="org.profile.mobileMandatory" datatype="html">
-        <source>Mobile is mandatory!</source>
-        <target>手机号不能为空</target>
+      <trans-unit id="permission.sys-managed" datatype="html">
+        <source>System Managed</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">16</context>
+          <context context-type="sourcefile">src/app/core/pipes/policy-type.pipe.ts</context>
+          <context context-type="linenumber">8</context>
         </context-group>
+        <target>系统托管</target>
       </trans-unit>
-      <trans-unit id="org.profile.mobilePlaceholder" datatype="html">
-        <source>Mobile</source>
-        <target>手机号</target>
+      <trans-unit id="permission.customer-managed" datatype="html">
+        <source>Customer Managed</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">18</context>
+          <context context-type="sourcefile">src/app/core/pipes/policy-type.pipe.ts</context>
+          <context context-type="linenumber">9</context>
         </context-group>
+        <target>客户托管</target>
       </trans-unit>
-      <trans-unit id="org.profile.save" datatype="html">
-        <source>Save</source>
-        <target>保存</target>
+      <trans-unit id="permissions.need-permissions-to-operate" datatype="html">
+        <source>You don&apos;t have permissions to take this action, please contact the admin to grant you the necessary permissions</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.html</context>
-          <context context-type="linenumber">28</context>
+          <context context-type="sourcefile">src/app/core/services/permissions.service.ts</context>
+          <context context-type="linenumber">13</context>
         </context-group>
+        <target>您未被授权进行该操作, 请联系账户管理员添加相关权限</target>
       </trans-unit>
-      <trans-unit id="org.profile.notProvided" datatype="html">
-        <source>Not provided</source>
-        <target>未关联</target>
+      <trans-unit id="2454050363478003966" datatype="html">
+        <source>Login</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.ts</context>
-          <context context-type="linenumber">26</context>
+          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
+          <context context-type="linenumber">3</context>
         </context-group>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.ts</context>
-          <context context-type="linenumber">27</context>
+          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
+          <context context-type="linenumber">39,40</context>
         </context-group>
+        <target>登录</target>
       </trans-unit>
-      <trans-unit id="org.profile.profileUpdateSuccess" datatype="html">
-        <source>Profile successfully updated</source>
-        <target>个人信息更新成功</target>
+      <trans-unit id="193324215946023286" datatype="html">
+        <source>username</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.ts</context>
-          <context context-type="linenumber">46</context>
+          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
+          <context context-type="linenumber">7,8</context>
         </context-group>
+        <target>用户名</target>
       </trans-unit>
-      <trans-unit id="org.profile.featureUnderConstruction" datatype="html">
-        <source>This feature will be released soon!</source>
-        <target>该功能正在开发中</target>
+      <trans-unit id="8056544210376488" datatype="html">
+        <source>username is mandatory</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/profile/profile.component.ts</context>
-          <context context-type="linenumber">51</context>
+          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
+          <context context-type="linenumber">13</context>
         </context-group>
+        <target>请输入用户名</target>
       </trans-unit>
-      <trans-unit id="org.project.projectFilterPlacehoder" datatype="html">
-        <source>Filter by name</source>
-        <target>按名称查找</target>
+      <trans-unit id="5908006480861982585" datatype="html">
+        <source>Illegal username</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">5</context>
+          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
+          <context context-type="linenumber">14</context>
         </context-group>
+        <target>非法用户名</target>
       </trans-unit>
-      <trans-unit id="org.project.description" datatype="html">
-        <source>Description</source>
-        <target>描述</target>
+      <trans-unit id="4267710907648326582" datatype="html">
+        <source>password is mandatory</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">29</context>
+          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
+          <context context-type="linenumber">19,20</context>
         </context-group>
+        <target>请输入密码</target>
       </trans-unit>
-      <trans-unit id="org.project.secret" datatype="html">
-        <source>Secret</source>
-        <target>Secret</target>
+      <trans-unit id="4809196861118879526" datatype="html">
+        <source>password</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">35</context>
+          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.html</context>
+          <context context-type="linenumber">26,27</context>
         </context-group>
+        <target>密码</target>
       </trans-unit>
-      <trans-unit id="org.project.edit" datatype="html">
-        <source>Edit</source>
-        <target>编辑</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">50</context>
-        </context-group>
+      <trans-unit id="4322589063241191419" datatype="html">
+        <source>username and/or password incorrect</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">72</context>
+          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.ts</context>
+          <context context-type="linenumber">58</context>
         </context-group>
+        <target>用户名和密码错误</target>
       </trans-unit>
-      <trans-unit id="org.project.remove" datatype="html">
-        <source>Remove</source>
-        <target>删除</target>
+      <trans-unit id="3427095830950090423" datatype="html">
+        <source>Login with success</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">57</context>
+          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.ts</context>
+          <context context-type="linenumber">63</context>
         </context-group>
+        <target>登录成功</target>
+      </trans-unit>
+      <trans-unit id="1294601887930644953" datatype="html">
+        <source>Error occurred, please contact the support.</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/account-settings/project/project.component.html</context>
-          <context context-type="linenumber">81</context>
+          <context context-type="sourcefile">src/app/features/login/do-login/do-login.component.ts</context>
+          <context context-type="linenumber">69</context>
         </context-group>
+        <target>服务错误，请联系运营人员。</target>
       </trans-unit>
       <trans-unit id="sync-locally" datatype="html">
         <source>Download/Upload</source>
-        <target>下载/上传</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/data-sync.component.html</context>
           <context context-type="linenumber">3</context>
         </context-group>
+        <target>下载/上传</target>
       </trans-unit>
       <trans-unit id="sync-with-server-side-sdk" datatype="html">
         <source>Sync with server side SDK</source>
-        <target>与 server side SDK 同步</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/data-sync.component.html</context>
           <context context-type="linenumber">6</context>
         </context-group>
+        <target>与 server side SDK 同步</target>
       </trans-unit>
       <trans-unit id="downloading" datatype="html">
         <source>Downloading...</source>
-        <target>下载中...</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">1</context>
         </context-group>
+        <target>下载中...</target>
       </trans-unit>
       <trans-unit id="only-applies-to-current-project-env" datatype="html">
         <source>Only applies to current project and environment (</source>
-        <target>数据同步只针对当前选择的项目和环境（ </target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">4</context>
         </context-group>
+        <target>数据同步只针对当前选择的项目和环境（</target>
       </trans-unit>
       <trans-unit id="including" datatype="html">
         <source>), including</source>
-        <target> ）, 包括以下数据</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">4</context>
         </context-group>
+        <target>）, 包括以下数据</target>
       </trans-unit>
       <trans-unit id="users" datatype="html">
         <source>Users</source>
-        <target>用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">7</context>
@@ -2573,82 +2586,82 @@
           <context context-type="sourcefile">src/app/features/safe/safe-routing.module.ts</context>
           <context context-type="linenumber">19</context>
         </context-group>
+        <target>用户</target>
       </trans-unit>
       <trans-unit id="including-all-users-of-current-env" datatype="html">
         <source>Including all users of current environment.</source>
-        <target>包含当前环境下的所有用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">8</context>
         </context-group>
+        <target>包含当前环境下的所有用户</target>
       </trans-unit>
       <trans-unit id="user-properties" datatype="html">
         <source>User properties</source>
-        <target>用户属性</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
+        <target>用户属性</target>
       </trans-unit>
       <trans-unit id="including-all-customized-user-properties" datatype="html">
-        <source>Including all customized user properties.</source>
-        <target>包含当前环境下的所有自定义用户属性。</target>
+        <source>Including all user properties of current environment.</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
+        <target>包含当前环境下的所有自定义用户属性。</target>
       </trans-unit>
       <trans-unit id="download-data" datatype="html">
         <source>Download data</source>
-        <target>下载数据</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">15</context>
         </context-group>
+        <target>下载数据</target>
       </trans-unit>
       <trans-unit id="download" datatype="html">
         <source>Download</source>
-        <target>下载</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">17</context>
         </context-group>
+        <target>下载</target>
       </trans-unit>
       <trans-unit id="upload-data" datatype="html">
         <source>Upload data</source>
-        <target>上传数据</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.html</context>
           <context context-type="linenumber">19</context>
         </context-group>
+        <target>上传数据</target>
       </trans-unit>
       <trans-unit id="5947241266456580665" datatype="html">
         <source>Download failed</source>
-        <target>下载失败</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/local-sync/local-sync.component.ts</context>
           <context context-type="linenumber">41</context>
         </context-group>
+        <target>下载失败</target>
       </trans-unit>
       <trans-unit id="filter-by-type" datatype="html">
         <source>Filter by type</source>
-        <target>根据类别筛选</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">3</context>
         </context-group>
+        <target>根据类别筛选</target>
       </trans-unit>
       <trans-unit id="synchronize-to-all-addresses-in-table" datatype="html">
         <source>Synchronize to all addresses in the table</source>
-        <target>对表格中的所有数据进行同步</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
+        <target>对表格中的所有数据进行同步</target>
       </trans-unit>
       <trans-unit id="synchronize" datatype="html">
         <source>Synchronize</source>
-        <target>同步</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">12</context>
@@ -2657,10 +2670,10 @@
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">98</context>
         </context-group>
+        <target>同步</target>
       </trans-unit>
       <trans-unit id="add" datatype="html">
         <source>Add</source>
-        <target>添加</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">16</context>
@@ -2669,10 +2682,10 @@
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">51</context>
         </context-group>
+        <target>添加</target>
       </trans-unit>
       <trans-unit id="common.type" datatype="html">
         <source>Type</source>
-        <target>类型</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">26</context>
@@ -2685,58 +2698,66 @@
           <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
           <context context-type="linenumber">30</context>
         </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <target>类型</target>
       </trans-unit>
       <trans-unit id="common.url" datatype="html">
         <source>URL</source>
-        <target>URL</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">27</context>
         </context-group>
+        <target>URL</target>
       </trans-unit>
       <trans-unit id="name" datatype="html">
         <source>Name</source>
-        <target>名称</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">38</context>
         </context-group>
+        <target>名称</target>
       </trans-unit>
       <trans-unit id="select-type" datatype="html">
         <source>Select type</source>
-        <target>选择类别</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">41</context>
         </context-group>
+        <target>选择类别</target>
       </trans-unit>
       <trans-unit id="url" datatype="html">
         <source>URL</source>
-        <target>URL</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">57</context>
         </context-group>
+        <target>URL</target>
       </trans-unit>
       <trans-unit id="1693176129016347712" datatype="html">
         <source>Succeeded at</source>
-        <target>成功，同步时间</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">103</context>
         </context-group>
+        <target>成功，同步时间</target>
       </trans-unit>
       <trans-unit id="failure-sync-time" datatype="html">
         <source>Failed at</source>
-        <target>失败，同步时间</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.html</context>
           <context context-type="linenumber">104</context>
         </context-group>
+        <target>失败，同步时间</target>
       </trans-unit>
       <trans-unit id="4648900870671159218" datatype="html">
         <source>Success</source>
-        <target>操作成功</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.ts</context>
           <context context-type="linenumber">113</context>
@@ -2745,66 +2766,66 @@
           <context context-type="sourcefile">src/app/features/safe/data-sync/remote-sync/remote-sync.component.ts</context>
           <context context-type="linenumber">181</context>
         </context-group>
+        <target>操作成功</target>
       </trans-unit>
       <trans-unit id="expt.expt" datatype="html">
         <source>Experiments</source>
-        <target>数据实验</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/experiments-routing.module.ts</context>
           <context context-type="linenumber">12</context>
         </context-group>
+        <target>数据实验</target>
       </trans-unit>
       <trans-unit id="expt.overview" datatype="html">
         <source>Overview</source>
-        <target>概览</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/experiments.component.html</context>
           <context context-type="linenumber">4</context>
         </context-group>
+        <target>概览</target>
       </trans-unit>
       <trans-unit id="expt.metrics" datatype="html">
         <source>Metrics</source>
-        <target>Metrics</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/experiments.component.html</context>
           <context context-type="linenumber">10</context>
         </context-group>
+        <target>Metrics</target>
       </trans-unit>
       <trans-unit id="common.all" datatype="html">
         <source>All</source>
-        <target>全部</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.html</context>
           <context context-type="linenumber">12</context>
         </context-group>
+        <target>全部</target>
       </trans-unit>
       <trans-unit id="expt.metric.custom-event-metric" datatype="html">
         <source>With custom event</source>
-        <target>自定义事件</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.html</context>
           <context context-type="linenumber">13</context>
         </context-group>
+        <target>自定义事件</target>
       </trans-unit>
       <trans-unit id="expt.metric.add-metric" datatype="html">
         <source>Add Metric</source>
-        <target>添加 Metric</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.html</context>
           <context context-type="linenumber">19</context>
         </context-group>
+        <target>添加 Metric</target>
       </trans-unit>
       <trans-unit id="expt.metric.event-type" datatype="html">
         <source>Event type</source>
-        <target>事件类型</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.html</context>
           <context context-type="linenumber">35</context>
         </context-group>
+        <target>事件类型</target>
       </trans-unit>
       <trans-unit id="common.custom-event" datatype="html">
-        <source>Custom: </source>
-        <target>自定义事件：</target>
+        <source>Custom:</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.html</context>
           <context context-type="linenumber">47</context>
@@ -2813,18 +2834,18 @@
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">86</context>
         </context-group>
+        <target>自定义事件：</target>
       </trans-unit>
       <trans-unit id="common.edit" datatype="html">
         <source>Edit</source>
-        <target>编辑</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.html</context>
           <context context-type="linenumber">72</context>
         </context-group>
+        <target>编辑</target>
       </trans-unit>
       <trans-unit id="common.loading-failed-try-again" datatype="html">
         <source>Loading failed, please try again</source>
-        <target>数据加载失败，请重试</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.ts</context>
           <context context-type="linenumber">80</context>
@@ -2833,107 +2854,107 @@
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.ts</context>
           <context context-type="linenumber">65</context>
         </context-group>
+        <target>数据加载失败，请重试</target>
       </trans-unit>
       <trans-unit id="expt.overview.metric-used-by-following-expt-remove-first" datatype="html">
         <source>The Metric is used by the following experiments, please remove those experiments first</source>
-        <target>该 Metric 在以下开关的实验中被使用，请先删除实验</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/metrics/metrics.component.ts</context>
           <context context-type="linenumber">131</context>
         </context-group>
+        <target>该 Metric 在以下开关的实验中被使用，请先删除实验</target>
       </trans-unit>
       <trans-unit id="expt.overview.in-progress" datatype="html">
         <source>In Progress</source>
-        <target>进行中</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
+        <target>进行中</target>
       </trans-unit>
       <trans-unit id="expt.overview.paused" datatype="html">
         <source>Paused</source>
-        <target>暂停</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">14</context>
         </context-group>
+        <target>暂停</target>
       </trans-unit>
       <trans-unit id="expt.overview.not-started" datatype="html">
         <source>Not Started</source>
-        <target>未开始</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">23</context>
         </context-group>
+        <target>未开始</target>
       </trans-unit>
       <trans-unit id="expt.overview.filter-by-ff-name" datatype="html">
         <source>Filter by feature flag name</source>
-        <target>按照开关名称查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">36</context>
         </context-group>
+        <target>按照开关名称查找</target>
       </trans-unit>
       <trans-unit id="expt.overview.add-expt" datatype="html">
         <source>Add Experiment</source>
-        <target>添加实验</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">45</context>
         </context-group>
+        <target>添加实验</target>
       </trans-unit>
       <trans-unit id="expt.overview.ff-name" datatype="html">
         <source>Feature flag name</source>
-        <target>开关名称</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">60</context>
         </context-group>
+        <target>开关名称</target>
       </trans-unit>
       <trans-unit id="expt.overview.metric-name" datatype="html">
         <source>Metric name</source>
-        <target>Metric 名称</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">61</context>
         </context-group>
+        <target>Metric 名称</target>
       </trans-unit>
       <trans-unit id="expt.overview.event-name" datatype="html">
         <source>Event name</source>
-        <target>事件名称</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">62</context>
         </context-group>
+        <target>事件名称</target>
       </trans-unit>
       <trans-unit id="expt.overview.status" datatype="html">
         <source>Status</source>
-        <target>状态</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">64</context>
         </context-group>
+        <target>状态</target>
       </trans-unit>
       <trans-unit id="4691064838760851520" datatype="html">
         <source>Check result</source>
-        <target>查看结果</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.html</context>
           <context context-type="linenumber">107</context>
         </context-group>
         <note priority="1" from="description">expt.overview.check-result</note>
+        <target>查看结果</target>
       </trans-unit>
       <trans-unit id="expt.overview.expt-exists" datatype="html">
         <source>Experiment with the same feature flag and metric exists</source>
-        <target>相同的实验已经存在</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/experiments/overview/overview.component.ts</context>
           <context context-type="linenumber">87</context>
         </context-group>
+        <target>相同的实验已经存在</target>
       </trans-unit>
       <trans-unit id="ff.routing.details.targeting" datatype="html">
         <source>Targeting</source>
-        <target>目标条件</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/details-routing.module.ts</context>
           <context context-type="linenumber">17</context>
@@ -2942,10 +2963,10 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/details.component.html</context>
           <context context-type="linenumber">7</context>
         </context-group>
+        <target>目标条件</target>
       </trans-unit>
       <trans-unit id="ff.routing.details.reporting" datatype="html">
         <source>Reporting</source>
-        <target>统计报表</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/details-routing.module.ts</context>
           <context context-type="linenumber">23</context>
@@ -2954,10 +2975,10 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/details.component.html</context>
           <context context-type="linenumber">25</context>
         </context-group>
+        <target>统计报表</target>
       </trans-unit>
       <trans-unit id="ff.routing.details.triggers" datatype="html">
         <source>Triggers</source>
-        <target>触发器</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/details-routing.module.ts</context>
           <context context-type="linenumber">29</context>
@@ -2966,10 +2987,10 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/details.component.html</context>
           <context context-type="linenumber">13</context>
         </context-group>
+        <target>触发器</target>
       </trans-unit>
       <trans-unit id="ff.routing.details.experimentation" datatype="html">
         <source>Experimentation</source>
-        <target>数据实验</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/details-routing.module.ts</context>
           <context context-type="linenumber">35</context>
@@ -2978,14 +2999,15 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/details.component.html</context>
           <context context-type="linenumber">19</context>
         </context-group>
+        <target>数据实验</target>
       </trans-unit>
       <trans-unit id="common.last-7d" datatype="html">
         <source>Last 7 days</source>
-        <target>过去7天</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/reporting/reporting.component.ts</context>
           <context context-type="linenumber">22</context>
         </context-group>
+        <target>过去7天</target>
       </trans-unit>
       <trans-unit id="common.last-24h" datatype="html">
         <source>Last 24 hours</source>
@@ -3010,7 +3032,6 @@
       </trans-unit>
       <trans-unit id="common.times-call" datatype="html">
         <source>Times of call</source>
-        <target>调用次数</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/reporting/reporting.component.ts</context>
           <context context-type="linenumber">56</context>
@@ -3023,66 +3044,66 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/reporting/reporting.component.ts</context>
           <context context-type="linenumber">95</context>
         </context-group>
+        <target>调用次数</target>
       </trans-unit>
       <trans-unit id="common.times" datatype="html">
         <source>Time</source>
-        <target>时间</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/reporting/reporting.component.ts</context>
           <context context-type="linenumber">86</context>
         </context-group>
+        <target>时间</target>
       </trans-unit>
       <trans-unit id="ff.ff-archived" datatype="html">
         <source>Archived</source>
-        <target>此开关已存档</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">11,13</context>
         </context-group>
+        <target>此开关已存档</target>
       </trans-unit>
       <trans-unit id="ff.you-can" datatype="html">
         <source>You can</source>
-        <target>您可以</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">14,15</context>
         </context-group>
+        <target>您可以</target>
       </trans-unit>
       <trans-unit id="ff.are-you-sure-to-recover-ff" datatype="html">
         <source>Are you sure to recover this feature flag?</source>
-        <target>确定复位开关么？</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">17,18</context>
         </context-group>
+        <target>确定复位开关么？</target>
       </trans-unit>
       <trans-unit id="ff.recover" datatype="html">
         <source>Recover</source>
-        <target>复位</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">18</context>
         </context-group>
+        <target>复位</target>
       </trans-unit>
       <trans-unit id="common.permanetly-remove" datatype="html">
         <source>Permanetly Remove</source>
-        <target>永久删除</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">20,21</context>
         </context-group>
+        <target>永久删除</target>
       </trans-unit>
       <trans-unit id="ff.the-ff" datatype="html">
         <source>the feature flag</source>
-        <target>此开关</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">21,22</context>
         </context-group>
+        <target>此开关</target>
       </trans-unit>
       <trans-unit id="ff.use-keyName-in-code-to-get-variation" datatype="html">
         <source>Use keyName in your code to get the feature flag variation</source>
-        <target>用于在代码中引用以获取开关返回值</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">42,44</context>
@@ -3095,50 +3116,50 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">161</context>
         </context-group>
+        <target>用于在代码中引用以获取开关返回值</target>
       </trans-unit>
       <trans-unit id="ff.are-you-sure-to-turn-ff-off" datatype="html">
         <source>Are you sure to turn it off? The variation set below would be returned.</source>
-        <target>确定要将开关设置为 OFF 吗? 设置后将只返回下方设置的开关关闭时的返回值。</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">49</context>
         </context-group>
+        <target>确定要将开关设置为 OFF 吗? 设置后将只返回下方设置的开关关闭时的返回值。</target>
       </trans-unit>
       <trans-unit id="ff.are-you-sure-to-turn-ff-on" datatype="html">
         <source>Are you sure to turn it on?  The matching targeting users&apos; or rules&apos; serving variation would be returned</source>
-        <target>确定要将开关设置为 ON 吗? 设置后将按照目标条件匹配用户。</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">50</context>
         </context-group>
+        <target>确定要将开关设置为 ON 吗? 设置后将按照目标条件匹配用户。</target>
       </trans-unit>
       <trans-unit id="ff.ff-is" datatype="html">
         <source>The feature flag is</source>
-        <target>开关状态为</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">51</context>
         </context-group>
+        <target>开关状态为</target>
       </trans-unit>
       <trans-unit id="ff.if-off-return" datatype="html">
-        <source>If OFF, return</source>
-        <target>OFF 时返回</target>
+        <source>If OFF, serve</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">54,56</context>
         </context-group>
+        <target>OFF 时返回</target>
       </trans-unit>
       <trans-unit id="ff.select-variation" datatype="html">
         <source>Select variation</source>
-        <target>选择返回值</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">60,61</context>
         </context-group>
+        <target>选择返回值</target>
       </trans-unit>
       <trans-unit id="common.variations" datatype="html">
         <source>Variations</source>
-        <target>返回值</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">70,71</context>
@@ -3147,66 +3168,66 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">59</context>
         </context-group>
+        <target>返回值</target>
       </trans-unit>
       <trans-unit id="common.data-type" datatype="html">
         <source>Data type</source>
-        <target>数据类型</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">77,78</context>
         </context-group>
+        <target>数据类型</target>
       </trans-unit>
       <trans-unit id="common.valid-json" datatype="html">
         <source>number, boolean, null and empty string are all valid JSON</source>
-        <target>number, boolean, null 以及空字符串都是合法 JSON</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">81</context>
         </context-group>
+        <target>number, boolean, null 以及空字符串都是合法 JSON</target>
       </trans-unit>
       <trans-unit id="common.downloading" datatype="html">
         <source>Downloading...</source>
-        <target>下载中</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">91,93</context>
         </context-group>
+        <target>下载中</target>
       </trans-unit>
       <trans-unit id="ff.download-matching-users" datatype="html">
         <source>Download matching users</source>
-        <target>下载匹配到的用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">114,116</context>
         </context-group>
+        <target>下载匹配到的用户</target>
       </trans-unit>
       <trans-unit id="common.wechat-mini-program" datatype="html">
         <source>Wechat Mini program</source>
-        <target>微信小程序</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">130,132</context>
         </context-group>
+        <target>微信小程序</target>
       </trans-unit>
       <trans-unit id="common.archive" datatype="html">
         <source>Archive</source>
-        <target>存档（软删除）</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.html</context>
           <context context-type="linenumber">144,145</context>
         </context-group>
+        <target>存档（软删除）</target>
       </trans-unit>
       <trans-unit id="ff.variation.type-value-not-match" datatype="html">
         <source>The type and value of the variation don&apos;t match</source>
-        <target>返回值类型与所填写内容不匹配，请改正后再保存！</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">160</context>
         </context-group>
+        <target>返回值类型与所填写内容不匹配，请改正后再保存！</target>
       </trans-unit>
       <trans-unit id="ff.variation-used-by-targeting-users" datatype="html">
         <source>This variation is used by targeting users, remove the reference before it can be safely removed</source>
-        <target>该状态已经在目标用户中被使用，移除后方可删除！</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">208</context>
@@ -3215,82 +3236,180 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">218</context>
         </context-group>
+        <target>该状态已经在目标用户中被使用，移除后方可删除！</target>
       </trans-unit>
       <trans-unit id="ff.variation-used-by-rules" datatype="html">
         <source>This variation is used by rules, remove the reference before it can be safely removed</source>
-        <target>该状态已经在匹配条件的规则中被使用，移除后方可删除！</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">213</context>
         </context-group>
+        <target>该状态已经在匹配条件的规则中被使用，移除后方可删除！</target>
       </trans-unit>
       <trans-unit id="ff.variation-used-by-off" datatype="html">
         <source>This variation is used by the value returned when the feature flag is OFF, remove the reference before it can be safely removed</source>
-        <target>该状态已经在开关处于 OFF 状态的返回值中被使用，移除后方可删除！</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">223</context>
         </context-group>
+        <target>该状态已经在开关处于 OFF 状态的返回值中被使用，移除后方可删除！</target>
       </trans-unit>
       <trans-unit id="ff.when-archived-status-change-to-off" datatype="html">
         <source>When archived, the status would be changed to</source>
-        <target>存档后开关将从开关列表中移除，开关将处于</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">297</context>
         </context-group>
+        <target>存档后开关将从开关列表中移除，开关将处于</target>
       </trans-unit>
       <trans-unit id="ff.and-return-varation-change-to" datatype="html">
         <source>and the returning variation would be changed to</source>
-        <target>且返回值将变为</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">299,297</context>
         </context-group>
+        <target>且返回值将变为</target>
       </trans-unit>
       <trans-unit id="ff.are-you-sure-to-archive-ff" datatype="html">
         <source>Are you sure to archive this feature flag?</source>
-        <target>确定要存档该开关吗？</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">304,302</context>
         </context-group>
+        <target>确定要存档该开关吗？</target>
       </trans-unit>
       <trans-unit id="common.download-failed" datatype="html">
         <source>Download failed</source>
-        <target>下载失败</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/details/setting/setting.component.ts</context>
           <context context-type="linenumber">359</context>
         </context-group>
+        <target>下载失败</target>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.setabtestrule" datatype="html">
+        <source>
+          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i nz-icon nzType=&quot;filter&quot; nzTheme=&quot;outline&quot;&gt;"></x>
+          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"></x>
+Set ab test rule        </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">7,9</context>
+        </context-group>
+        <target>设置AB测试规则</target>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.save" datatype="html">
+        <source>
+          <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i nz-icon nzType=&quot;icons:icon-save&quot;&gt;"></x>
+          <x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"></x>
+Save &amp; Update        </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">11,13</context>
+        </context-group>
+        <target>保存并更新</target>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.changerequest" datatype="html">
+        <source>Change request</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">20,22</context>
+        </context-group>
+        <target>变更请求</target>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.scheduling" datatype="html">
+        <source>Scheduling</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">24,26</context>
+        </context-group>
+        <target>定时变更</target>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.defaultrule" datatype="html">
+        <source>Default rule</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">34</context>
+        </context-group>
+        <target>默认规则</target>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.defaultrule-tooltip" datatype="html">
+        <source>If the flag is turned on, the following variation is served</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">35</context>
+        </context-group>
+        <target>如果开关被开启则返回以下结果</target>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.individualtargeting" datatype="html">
+        <source>Individual targeting</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">48</context>
+        </context-group>
+        <target>黑/白名单</target>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.coverdefaultrule-tooltip" datatype="html">
+        <source>The default rule will be overridden when the rules are met</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">54</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">69</context>
+        </context-group>
+        <target>满足规则后将覆盖原有的默认规则</target>
+      </trans-unit>
+      <trans-unit id="ff.components.details.targeting.customizedrules" datatype="html">
+        <source>Target users who match these rules</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.html</context>
+          <context context-type="linenumber">68</context>
+        </context-group>
+        <target>自定义规则</target>
+      </trans-unit>
+      <trans-unit id="common.save-success" datatype="html">
+        <source>Saved Successfully</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.ts</context>
+          <context context-type="linenumber">313</context>
+        </context-group>
+        <target>保存与更新成功</target>
+      </trans-unit>
+      <trans-unit id="common.save-fial" datatype="html">
+        <source>Failed to Save</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/details/targeting/targeting.component.ts</context>
+          <context context-type="linenumber">319</context>
+        </context-group>
+        <target>保存失败</target>
       </trans-unit>
       <trans-unit id="ff.routing.idx.pageTitle" datatype="html">
         <source>Feature flags</source>
-        <target>开关管理</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index-routing.module.ts</context>
           <context context-type="linenumber">8</context>
         </context-group>
+        <target>开关管理</target>
       </trans-unit>
       <trans-unit id="ff.idx.filter-by-name-and-keyname" datatype="html">
         <source>Filter by name or keyName</source>
-        <target>按名称或 keyName 查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">6</context>
         </context-group>
+        <target>按名称或 keyName 查找</target>
       </trans-unit>
       <trans-unit id="ff.idx.filter-by-status" datatype="html">
         <source>Filter by status</source>
-        <target>按状态查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">12</context>
         </context-group>
+        <target>按状态查找</target>
       </trans-unit>
       <trans-unit id="common.tags" datatype="html">
         <source>Tags</source>
-        <target>标签</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">24</context>
@@ -3303,58 +3422,58 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">183</context>
         </context-group>
+        <target>标签</target>
       </trans-unit>
       <trans-unit id="ff.idx.copy-to-env" datatype="html">
         <source>Copy to environment</source>
-        <target>复制到环境</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">31</context>
         </context-group>
+        <target>复制到环境</target>
       </trans-unit>
       <trans-unit id="common.status" datatype="html">
         <source>Status</source>
-        <target>状态</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">57</context>
         </context-group>
+        <target>状态</target>
       </trans-unit>
       <trans-unit id="ff.idx.are-you-sure-to-disable-ff" datatype="html">
         <source>Are you sure to turn it off? The variation returned would be changed when it is off</source>
-        <target>确定要关闭该开关吗? 关闭后开关将返回处于关闭状态时的设定值。</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">80</context>
         </context-group>
+        <target>确定要关闭该开关吗? 关闭后开关将返回处于关闭状态时的设定值。</target>
       </trans-unit>
       <trans-unit id="ff.idx.are-you-sure-to-enable-ff" datatype="html">
         <source>Are you sure to turn it on? The matching targeting users&apos; or rules&apos; serving variation would be returned</source>
-        <target>确定要开启该开关吗? 开启后将按照目标条件匹配用户。</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">87</context>
         </context-group>
+        <target>确定要开启该开关吗? 开启后将按照目标条件匹配用户。</target>
       </trans-unit>
       <trans-unit id="common.num-variations" datatype="html">
         <source>Variations</source>
-        <target>个版本</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">115</context>
         </context-group>
+        <target>个版本</target>
       </trans-unit>
       <trans-unit id="ff.idx.new-ff" datatype="html">
         <source>New feature flag</source>
-        <target>新建开关</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">144</context>
         </context-group>
+        <target>新建开关</target>
       </trans-unit>
       <trans-unit id="common.name-cannot-be-empty" datatype="html">
         <source>Name cannot be empty</source>
-        <target>名称不能为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">152</context>
@@ -3363,10 +3482,10 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">66</context>
         </context-group>
+        <target>名称不能为空</target>
       </trans-unit>
       <trans-unit id="common.name-cannot-include---" datatype="html">
         <source>Name cannot include &apos;__&apos;</source>
-        <target>开关名称不能包含 &apos;__&apos;</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">153</context>
@@ -3375,86 +3494,99 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">67</context>
         </context-group>
+        <target>开关名称不能包含 &apos;__&apos;</target>
       </trans-unit>
       <trans-unit id="common.name-keyName-unavailable" datatype="html">
         <source>This name/KeyName is unavailable</source>
-        <target>该名称/KeyName已被使用</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">154</context>
         </context-group>
+        <target>该名称/KeyName已被使用</target>
+      </trans-unit>
+      <trans-unit id="common.name-validation-failed" datatype="html">
+        <source>Name validation failed</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
+          <context context-type="linenumber">155</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
+          <context context-type="linenumber">69</context>
+        </context-group>
+        <target>名称校验失败</target>
       </trans-unit>
       <trans-unit id="ff.idx.keyName-generated-from-name" datatype="html">
         <source>keyName is generated from name</source>
-        <target>开关 keyName 由名称自动生成</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">162</context>
         </context-group>
+        <target>开关 keyName 由名称自动生成</target>
       </trans-unit>
       <trans-unit id="common.bulk-copy" datatype="html">
         <source>Bulk copy</source>
-        <target>批量复制</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">199</context>
         </context-group>
+        <target>批量复制</target>
       </trans-unit>
       <trans-unit id="ff.idx.only-following-fields-are-copied" datatype="html">
         <source>Only following fields are copied: name, keyName, status, variation and default variation.</source>
-        <target>复制开关时仅复制以下信息：开关名称、KeyName、状态、返回值、默认规则。</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">206</context>
         </context-group>
+        <target>复制开关时仅复制以下信息：开关名称、KeyName、状态、返回值、默认规则。</target>
       </trans-unit>
       <trans-unit id="ff.idx.selected-ff" datatype="html">
         <source>Selected feature flags</source>
-        <target>已选择的开关</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">216</context>
         </context-group>
+        <target>已选择的开关</target>
       </trans-unit>
       <trans-unit id="common.copy-to" datatype="html">
         <source>Copy to</source>
-        <target>复制到</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">221</context>
         </context-group>
+        <target>复制到</target>
       </trans-unit>
       <trans-unit id="common.targeting-env" datatype="html">
         <source>Targeting environment</source>
-        <target>目标环境</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.html</context>
           <context context-type="linenumber">231</context>
         </context-group>
+        <target>目标环境</target>
       </trans-unit>
       <trans-unit id="ff.idx.select-ff-to-copy" datatype="html">
         <source>Please select at least one feature flag to copy</source>
-        <target>请先选择需要复制的开关</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.ts</context>
           <context context-type="linenumber">104</context>
         </context-group>
+        <target>请先选择需要复制的开关</target>
       </trans-unit>
       <trans-unit id="ff.idx.successfully-copied" datatype="html">
         <source>Successfully copied</source>
-        <target>成功复制</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.ts</context>
           <context context-type="linenumber">129</context>
         </context-group>
+        <target>成功复制</target>
       </trans-unit>
       <trans-unit id="ff.idx.ff-to-env" datatype="html">
         <source>feature flags to environment</source>
-        <target>个开关到环境</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.ts</context>
           <context context-type="linenumber">131</context>
         </context-group>
+        <target>个开关到环境</target>
       </trans-unit>
       <trans-unit id="ff.idx.following-ff-exist-in-targeting-env" datatype="html">
         <source>Following feature flags have been ignored as they are already in the targeting environment</source>
@@ -3465,15 +3597,14 @@
       </trans-unit>
       <trans-unit id="ff.idx.copy-result" datatype="html">
         <source>Copy result</source>
-        <target>复制结果</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.ts</context>
           <context context-type="linenumber">137</context>
         </context-group>
+        <target>复制结果</target>
       </trans-unit>
       <trans-unit id="ff.idx.the-status-of-ff" datatype="html">
-        <source>The status of feature flag </source>
-        <target>开关状态</target>
+        <source>The status of feature flag</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.ts</context>
           <context context-type="linenumber">311</context>
@@ -3482,18 +3613,18 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.ts</context>
           <context context-type="linenumber">321</context>
         </context-group>
+        <target>开关状态</target>
       </trans-unit>
       <trans-unit id="ff.idx.changed-to-off" datatype="html">
         <source>is changed to OFF</source>
-        <target>已切换至 OFF</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.ts</context>
           <context context-type="linenumber">312</context>
         </context-group>
+        <target>已切换至 OFF</target>
       </trans-unit>
       <trans-unit id="ff.idx.status-change-failed" datatype="html">
         <source>Failed to change feature flag status</source>
-        <target>开关状态切换失败</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.ts</context>
           <context context-type="linenumber">316</context>
@@ -3502,106 +3633,118 @@
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.ts</context>
           <context context-type="linenumber">326</context>
         </context-group>
+        <target>开关状态切换失败</target>
       </trans-unit>
       <trans-unit id="ff.idx.changed-to-on" datatype="html">
         <source>is changed to ON</source>
-        <target>已切换至 ON</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/index.component.ts</context>
           <context context-type="linenumber">322</context>
         </context-group>
+        <target>已切换至 ON</target>
       </trans-unit>
       <trans-unit id="ff.idx.filter-by-tags" datatype="html">
         <source>Filter by tags</source>
-        <target>按标签查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-select.component.ts</context>
           <context context-type="linenumber">11</context>
         </context-group>
+        <target>按标签查找</target>
       </trans-unit>
       <trans-unit id="common.etc" datatype="html">
         <source>+</source>
-        <target>及另外</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-select.component.ts</context>
           <context context-type="linenumber">21</context>
         </context-group>
+        <target>及另外</target>
       </trans-unit>
       <trans-unit id="common.entries" datatype="html">
         <source>more</source>
-        <target>个</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-select.component.ts</context>
           <context context-type="linenumber">21</context>
         </context-group>
+        <target>个</target>
       </trans-unit>
       <trans-unit id="ff.add-root-node" datatype="html">
         <source>Add root node</source>
-        <target>添加根节点</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-view.component.ts</context>
           <context context-type="linenumber">22</context>
         </context-group>
+        <target>添加根节点</target>
       </trans-unit>
       <trans-unit id="ff.add-child-node" datatype="html">
         <source>Add child node</source>
-        <target>添加子节点</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-view.component.ts</context>
           <context context-type="linenumber">62</context>
         </context-group>
+        <target>添加子节点</target>
       </trans-unit>
       <trans-unit id="common.binded" datatype="html">
         <source>Binded</source>
-        <target>已关联</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-view.component.ts</context>
           <context context-type="linenumber">99</context>
         </context-group>
+        <target>已关联</target>
       </trans-unit>
       <trans-unit id="common.unbinded" datatype="html">
         <source>Unbinded</source>
-        <target>未关联</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-view.component.ts</context>
           <context context-type="linenumber">100</context>
         </context-group>
+        <target>未关联</target>
       </trans-unit>
       <trans-unit id="ff.node-name-cannot-be-empty" datatype="html">
         <source>Node name cannot be empty</source>
-        <target>节点名称不能为空</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/feature-flags/index/switch-tag-tree-view.component.ts</context>
           <context context-type="linenumber">253</context>
         </context-group>
+        <target>节点名称不能为空</target>
+      </trans-unit>
+      <trans-unit id="common.rule" datatype="html">
+        <source>Rule</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/feature-flags/types/switch-new.ts</context>
+          <context context-type="linenumber">174</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/segments/types/segments-index.ts</context>
+          <context context-type="linenumber">91</context>
+        </context-group>
+        <target>规则</target>
       </trans-unit>
       <trans-unit id="common.action" datatype="html">
         <source>Action</source>
-        <target>操作</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/actions-selector/actions-selector.component.html</context>
           <context context-type="linenumber">3</context>
         </context-group>
+        <target>操作</target>
       </trans-unit>
       <trans-unit id="common.num-actions" datatype="html">
         <source>Action(s)</source>
-        <target>个操作</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/actions-selector/actions-selector.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
+        <target>个操作</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.select-action" datatype="html">
         <source>Select action</source>
-        <target>选择操作</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/actions-selector/actions-selector.component.html</context>
           <context context-type="linenumber">18</context>
         </context-group>
+        <target>选择操作</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.managed-policies-cannot-be-modified" datatype="html">
-        <source>Managed policies cannot be modified</source>
-        <target>系统托管策略不允许被修改</target>
+        <source>System Managed policies cannot be modified</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
           <context context-type="linenumber">1</context>
@@ -3610,18 +3753,18 @@
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.ts</context>
           <context context-type="linenumber">152</context>
         </context-group>
+        <target>系统托管策略不允许被修改</target>
       </trans-unit>
-      <trans-unit id="iam.policies.details.copy-policy" datatype="html">
-        <source>Copy policy</source>
-        <target>复制策略</target>
+      <trans-unit id="common.copy" datatype="html">
+        <source>Copy</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
+        <target>复制</target>
       </trans-unit>
       <trans-unit id="common.permissions" datatype="html">
         <source>Permissions</source>
-        <target>权限</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
           <context context-type="linenumber">14</context>
@@ -3630,18 +3773,18 @@
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/details.component.html</context>
           <context context-type="linenumber">7</context>
         </context-group>
+        <target>权限</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.resource-type" datatype="html">
         <source>Resource type</source>
-        <target>资源类型</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
           <context context-type="linenumber">22</context>
         </context-group>
+        <target>资源类型</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.allow-or-deny" datatype="html">
         <source>Allow or deny</source>
-        <target>允许或禁止操作</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
           <context context-type="linenumber">46</context>
@@ -3650,174 +3793,176 @@
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.html</context>
           <context context-type="linenumber">47</context>
         </context-group>
+        <target>允许或禁止操作</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.assure-resource-operation" datatype="html">
         <source>Make sure resource and operation are set for all permissions</source>
-        <target>请确保已设置所有权限的资源和操作</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/policy-editor.component.ts</context>
           <context context-type="linenumber">158</context>
         </context-group>
+        <target>请确保已设置所有权限的资源和操作</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.resource" datatype="html">
         <source>Resource</source>
-        <target>资源</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
           <context context-type="linenumber">4</context>
         </context-group>
+        <target>资源</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.when-resource-type-is" datatype="html">
         <source>Can only select one resource</source>
-        <target>只能选择一个资源</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
+        <target>只能选择一个资源</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.num-resource" datatype="html">
         <source>Resource(s)</source>
-        <target>个资源</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
           <context context-type="linenumber">8</context>
         </context-group>
+        <target>个资源</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.select-resource" datatype="html">
         <source>Select resource</source>
-        <target>选择资源</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
           <context context-type="linenumber">21</context>
         </context-group>
+        <target>选择资源</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.set-resource-name" datatype="html">
         <source>Set resource name (RN)</source>
-        <target>设置资源名（RN）</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
           <context context-type="linenumber">48</context>
         </context-group>
+        <target>设置资源名（RN）</target>
+      </trans-unit>
+      <trans-unit id="iam.policies.details.resource-name-description" datatype="html">
+        <source>Resource name (RN) uniquely identify resources. Every data can be seen as a resource, Project, Environment and Feature flag for example.</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
+          <context context-type="linenumber">52</context>
+        </context-group>
+        <target>资源名 (RN) 是资源的唯一标识。系统中每个数据都可看做是一个资源，比如项目、环境、开关等。</target>
+      </trans-unit>
+      <trans-unit id="iam.policies.details.legal-resource-name" datatype="html">
+        <source>
+          <x id="INTERPOLATION" equiv-text="{{&apos;{&apos;}}"></x>
+          <x id="INTERPOLATION_1" equiv-text="{{&apos;}&apos;}}"></x>
+Legal resource name (RN) cannot includeand :        </source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
+          <context context-type="linenumber">53</context>
+        </context-group>
+        <target>
+          <x id="INTERPOLATION" equiv-text="{{&apos;{&apos;}}"></x>
+          <x id="INTERPOLATION_1" equiv-text="{{&apos;}&apos;}}"></x>
+合法的资源名 (RN) 不可以包含英文冒号,以及        </target>
+      </trans-unit>
+      <trans-unit id="common.resource-name" datatype="html">
+        <source>Resource name (RN)</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
+          <context context-type="linenumber">58</context>
+        </context-group>
+        <target>资源名 (RN)</target>
+      </trans-unit>
+      <trans-unit id="common.any" datatype="html">
+        <source>Any</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
+          <context context-type="linenumber">68</context>
+        </context-group>
+        <target>任意</target>
+      </trans-unit>
+      <trans-unit id="common.team" datatype="html">
+        <source>Team</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/details.component.html</context>
+          <context context-type="linenumber">7</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/details.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <target>团队</target>
+      </trans-unit>
+      <trans-unit id="common.policies" datatype="html">
+        <source>Policies</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/details.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <target>策略</target>
+      </trans-unit>
+      <trans-unit id="iam.groups.details.dp-filter-placeholder" datatype="html">
+        <source>Filter by policy name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
+          <context context-type="linenumber">6</context>
+        </context-group>
+        <target>按策略名称查找</target>
+      </trans-unit>
+      <trans-unit id="iam.groups.details.all-policies" datatype="html">
+        <source>All</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
+        <target>所有策略</target>
+      </trans-unit>
+      <trans-unit id="iam.groups.details.current-policies" datatype="html">
+        <source>Affected to current group</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
+          <context context-type="linenumber">14</context>
+        </context-group>
+        <target>当前组所拥有的策略</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.name" datatype="html">
+        <source>Name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
+          <context context-type="linenumber">29</context>
+        </context-group>
+        <target>名称</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.type" datatype="html">
+        <source>Type</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
+          <context context-type="linenumber">30</context>
+        </context-group>
+        <target>类型</target>
       </trans-unit>
-       <trans-unit id="iam.policies.details.resource-name-description" datatype="html">
-         <source>Resource name (RN) uniquely identify resources. Every data can be seen as a resource, Project, Environment and Feature flag for example.</source>
-         <target>资源名 (RN) 是资源的唯一标识。系统中每个数据都可看做是一个资源，比如项目、环境、开关等。</target>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
-           <context context-type="linenumber">52</context>
-         </context-group>
-       </trans-unit>
-       <trans-unit id="iam.policies.details.legal-resource-name" datatype="html">
-         <source>Legal resource name (RN) cannot include <x id="INTERPOLATION" equiv-text="{{&apos;{&apos;}}"/> <x id="INTERPOLATION_1" equiv-text="{{&apos;}&apos;}}"/> and :</source>
-         <target>合法的资源名 (RN) 不可以包含英文冒号, <x id="INTERPOLATION" equiv-text="{{&apos;{&apos;}}"/> 以及 <x id="INTERPOLATION_1" equiv-text="{{&apos;}&apos;}}"/></target>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
-           <context context-type="linenumber">53</context>
-         </context-group>
-       </trans-unit>
-       <trans-unit id="common.resource-name" datatype="html">
-         <source>Resource name (RN)</source>
-         <target>资源名 (RN)</target>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
-           <context context-type="linenumber">58</context>
-         </context-group>
-       </trans-unit>
-       <trans-unit id="common.any" datatype="html">
-         <source>Any</source>
-         <target>任意</target>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/components/policy-editor/resources-selector/resources-selector.component.html</context>
-           <context context-type="linenumber">68</context>
-         </context-group>
-       </trans-unit>
-       <trans-unit id="iam.groups.details.dp-filter-placeholder" datatype="html">
-         <source>Filter by policy name</source>
-         <target>按策略名称查找</target>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
-           <context context-type="linenumber">6</context>
-         </context-group>
-       </trans-unit>
-       <trans-unit id="iam.groups.details.all-policies" datatype="html">
-         <source>All policies</source>
-         <target>所有策略</target>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
-           <context context-type="linenumber">13</context>
-         </context-group>
-       </trans-unit>
-       <trans-unit id="iam.groups.details.current-policies" datatype="html">
-         <source>Policies binded to current group</source>
-         <target>当前组所拥有的策略</target>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
-           <context context-type="linenumber">14</context>
-         </context-group>
-       </trans-unit>
-       <trans-unit id="iam.team.details.name" datatype="html">
-         <source>Name</source>
-         <target>名称</target>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
-           <context context-type="linenumber">29</context>
-         </context-group>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
-           <context context-type="linenumber">30</context>
-         </context-group>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
-           <context context-type="linenumber">23</context>
-         </context-group>
-       </trans-unit>
-       <trans-unit id="iam.team.details.type" datatype="html">
-         <source>Type</source>
-         <target>类型</target>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
-           <context context-type="linenumber">30</context>
-         </context-group>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
-           <context context-type="linenumber">31</context>
-         </context-group>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
-           <context context-type="linenumber">25</context>
-         </context-group>
-       </trans-unit>
-       <trans-unit id="iam.team.details.description" datatype="html">
-         <source>Description</source>
-         <target>描述</target>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
-           <context context-type="linenumber">31</context>
-         </context-group>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
-           <context context-type="linenumber">32</context>
-         </context-group>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
-           <context context-type="linenumber">28</context>
-         </context-group>
-         <context-group purpose="location">
-           <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
-           <context context-type="linenumber">26</context>
-         </context-group>
+      <trans-unit id="iam.team.details.description" datatype="html">
+        <source>Description</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
+          <context context-type="linenumber">31</context>
+        </context-group>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
+          <context context-type="linenumber">28</context>
+        </context-group>
+        <target>描述</target>
       </trans-unit>
       <trans-unit id="iam.group.details.remove-policy-confirm" datatype="html">
         <source>Are you sure to remove the policy from the group?</source>
-        <target>确定将该策略从组中移除吗？</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/policies/policies.component.html</context>
           <context context-type="linenumber">49</context>
         </context-group>
+        <target>确定将该策略从组中移除吗？</target>
       </trans-unit>
       <trans-unit id="common.rn" datatype="html">
         <source>Resource name (RN)</source>
-        <target>资源名 （RN）</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/setting/setting.component.html</context>
           <context context-type="linenumber">33</context>
@@ -3836,40 +3981,40 @@
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">31</context>
+          <context context-type="linenumber">27</context>
         </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
           <context context-type="linenumber">32</context>
         </context-group>
+        <target>资源名 （RN）</target>
       </trans-unit>
       <trans-unit id="iam.groups.details.team-filter-placeholder" datatype="html">
-        <source>Filter by mobile or Email</source>
-        <target>按电话或邮箱查找</target>
+        <source>Filter by Email</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
+        <target>按电话或邮箱查找</target>
       </trans-unit>
       <trans-unit id="iam.groups.details.all-members" datatype="html">
-        <source>All team members</source>
-        <target>所有成员</target>
+        <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
+        <target>所有成员</target>
       </trans-unit>
       <trans-unit id="iam.groups.details.current-members" datatype="html">
-        <source>Members included in current group</source>
-        <target>当前组所包含的成员</target>
+        <source>Contained by current group</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
           <context context-type="linenumber">12</context>
         </context-group>
+        <target>当前组所包含的成员</target>
       </trans-unit>
       <trans-unit id="common.email" datatype="html">
         <source>Email</source>
-        <target>邮箱</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
           <context context-type="linenumber">28</context>
@@ -3886,10 +4031,10 @@
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
           <context context-type="linenumber">30</context>
         </context-group>
+        <target>邮箱</target>
       </trans-unit>
       <trans-unit id="common.mobile" datatype="html">
         <source>Mobile</source>
-        <target>电话</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
           <context context-type="linenumber">29</context>
@@ -3898,162 +4043,142 @@
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
           <context context-type="linenumber">30</context>
         </context-group>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">27</context>
-        </context-group>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
           <context context-type="linenumber">31</context>
         </context-group>
+        <target>电话</target>
       </trans-unit>
       <trans-unit id="iam.groups.details.remove-member-confirm" datatype="html">
         <source>Are you sure to remove the member from the current group?</source>
-        <target>确定将成员从当前组中删除吗？</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/details/team/team.component.html</context>
           <context context-type="linenumber">43</context>
         </context-group>
+        <target>确定将成员从当前组中删除吗？</target>
       </trans-unit>
       <trans-unit id="iam.groups.idx.searchPlaceholder" datatype="html">
         <source>Filter by name</source>
-        <target>按名称查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/index/index.component.html</context>
           <context context-type="linenumber">4</context>
         </context-group>
+        <target>按名称查找</target>
       </trans-unit>
       <trans-unit id="iam.groups.idx.add" datatype="html">
         <source>Add</source>
-        <target>添加</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/groups/index/index.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
+        <target>添加</target>
       </trans-unit>
       <trans-unit id="ff.routing.team.pageTitle" datatype="html">
         <source>IAM - Team</source>
-        <target>权限管理 - 团队</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/iam-routing.module.ts</context>
           <context context-type="linenumber">14</context>
         </context-group>
+        <target>权限管理 - 团队</target>
       </trans-unit>
       <trans-unit id="ff.routing.groups.pageTitle" datatype="html">
         <source>IAM - Groups</source>
-        <target>权限管理 - 组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/iam-routing.module.ts</context>
           <context context-type="linenumber">21</context>
         </context-group>
+        <target>权限管理 - 组</target>
       </trans-unit>
       <trans-unit id="ff.routing.policies.pageTitle" datatype="html">
         <source>IAM - Policies</source>
-        <target>权限管理 - 策略</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/iam-routing.module.ts</context>
           <context context-type="linenumber">28</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="common.team" datatype="html">
-        <source>Team</source>
-        <target>团队</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/details/details.component.html</context>
-          <context context-type="linenumber">13</context>
-        </context-group>
+        <target>权限管理 - 策略</target>
       </trans-unit>
       <trans-unit id="common.groups" datatype="html">
         <source>Groups</source>
-        <target>组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/details.component.html</context>
           <context context-type="linenumber">19</context>
         </context-group>
+        <target>组</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.group-filter-placeholder" datatype="html">
         <source>Filter by group name</source>
-        <target>按名称查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/groups/groups.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
+        <target>按名称查找</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.all-groups" datatype="html">
-        <source>All groups</source>
-        <target>所有组</target>
+        <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/groups/groups.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
+        <target>所有组</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.current-groups" datatype="html">
-        <source>Groups current policy binded to</source>
-        <target>包含当前策略的所有组</target>
+        <source>Groups with current policy</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/groups/groups.component.html</context>
           <context context-type="linenumber">12</context>
         </context-group>
+        <target>包含当前策略的所有组</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.remove-policy-confirm" datatype="html">
         <source>Are you sure to remove the policy from the group?</source>
-        <target>确定将策略从组中删除吗？</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/groups/groups.component.html</context>
           <context context-type="linenumber">42</context>
         </context-group>
+        <target>确定将策略从组中删除吗？</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.team-filter-placeholder" datatype="html">
         <source>Filter by mobile or Email</source>
-        <target>按邮箱或电话查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
+        <target>按邮箱或电话查找</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.all-members" datatype="html">
-        <source>All team members</source>
-        <target>所有成员</target>
+        <source>All</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
           <context context-type="linenumber">11</context>
         </context-group>
+        <target>所有成员</target>
       </trans-unit>
       <trans-unit id="iam.policies.policies.current-members" datatype="html">
-        <source>Members current policy binded to</source>
-        <target>拥有当前策略的所有成员</target>
+        <source>Members with current policy</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
           <context context-type="linenumber">12</context>
         </context-group>
+        <target>拥有当前策略的所有成员</target>
       </trans-unit>
       <trans-unit id="iam.policies.details.remove-member-confirm" datatype="html">
         <source>Are you sure to remove the member from the current policy?</source>
-        <target>确定将当前策略从该用户移除吗？</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/details/team/team.component.html</context>
           <context context-type="linenumber">44</context>
         </context-group>
+        <target>确定将当前策略从该用户移除吗？</target>
       </trans-unit>
       <trans-unit id="iam.policies.idx.searchPlaceholder" datatype="html">
         <source>Filter by name</source>
-        <target>按名字查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
           <context context-type="linenumber">4</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="iam.policies.idx.add" datatype="html">
-        <source>Add</source>
-        <target>添加</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/policies/index/index.component.html</context>
-          <context context-type="linenumber">11</context>
-        </context-group>
+        <target>按名字查找</target>
       </trans-unit>
       <trans-unit id="iam.team.details.groups" datatype="html">
         <source>Groups</source>
-        <target>组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/details.component.html</context>
           <context context-type="linenumber">7</context>
@@ -4062,290 +4187,503 @@
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
           <context context-type="linenumber">24</context>
         </context-group>
+        <target>组</target>
       </trans-unit>
       <trans-unit id="iam.team.details.direct-policies" datatype="html">
         <source>Direct policies</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/details.component.html</context>
+          <context context-type="linenumber">13</context>
+        </context-group>
         <target>操作失败</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.inherited-policies" datatype="html">
+        <source>Inherited policies from groups</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/iam/team/details/details.component.html</context>
+          <context context-type="linenumber">19</context>
+        </context-group>
+        <target>继承自组的策略</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.dp-filter-placeholder" datatype="html">
+        <source>Filter by policy name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
+          <context context-type="linenumber">6</context>
+        </context-group>
+        <target>按策略名称查找</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.all-policies" datatype="html">
+        <source>All</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
           <context context-type="linenumber">13</context>
         </context-group>
+        <target>所有策略</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.current-policies" datatype="html">
+        <source>Affected to current member</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
+          <context context-type="linenumber">14</context>
+        </context-group>
+        <target>当前成员所拥有的策略</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.remove-policy-from" datatype="html">
+        <source>Are you sure to remove the policy from current member?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
+          <context context-type="linenumber">50</context>
+        </context-group>
+        <target>确定将策略从当前成员移除吗？</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.group-filter-placeholder" datatype="html">
+        <source>Filter by group name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
+          <context context-type="linenumber">5</context>
+        </context-group>
+        <target>按名称查找</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.all-groups" datatype="html">
+        <source>All</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <target>所有组</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.current-groups" datatype="html">
+        <source>Containing current member</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+        <target>当前用户所在的组</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.remove-member-from" datatype="html">
+        <source>Are you sure to remove the member from group:</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
+          <context context-type="linenumber">49</context>
+        </context-group>
+        <target>确定将该用户从</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.remove-member-from-suffix" datatype="html">
+        <source>?</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
+          <context context-type="linenumber">49</context>
+        </context-group>
+        <target>组中移除么？</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.ip-filter-placeholder" datatype="html">
+        <source>Filter by policy name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
+          <context context-type="linenumber">5</context>
+        </context-group>
+        <target>按名称查找</target>
+      </trans-unit>
+      <trans-unit id="iam.team.details.name-placeholder" datatype="html">
+        <source>Name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <target>名称</target>
+      </trans-unit>
+      <trans-unit id="iam.team.idx.searchPlaceholder" datatype="html">
+        <source>Filter by Email</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
+          <context context-type="linenumber">4</context>
+        </context-group>
+        <target>按电话或邮箱筛选</target>
+      </trans-unit>
+      <trans-unit id="iam.team.idx.add" datatype="html">
+        <source>Add</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
+          <context context-type="linenumber">11</context>
+        </context-group>
+        <target>添加</target>
+      </trans-unit>
+      <trans-unit id="iam.team.idx.group" datatype="html">
+        <source>Group</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
+          <context context-type="linenumber">33</context>
+        </context-group>
+        <target>组</target>
+      </trans-unit>
+      <trans-unit id="iam.team.idx.initial-password" datatype="html">
+        <source>Initial password</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
+          <context context-type="linenumber">34</context>
+        </context-group>
+        <target>初始密码</target>
+      </trans-unit>
+      <trans-unit id="iam.team.idx.etc" datatype="html">
+        <source>+</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
+          <context context-type="linenumber">53</context>
+        </context-group>
+        <target>及另外</target>
+      </trans-unit>
+      <trans-unit id="iam.team.idx.entries" datatype="html">
+        <source>more</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
+          <context context-type="linenumber">53</context>
+        </context-group>
+        <target>项</target>
+      </trans-unit>
+      <trans-unit id="onboarding.create-org-project" datatype="html">
+        <source>Create organization and project</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/onboarding/steps/steps.component.html</context>
+          <context context-type="linenumber">4</context>
+        </context-group>
+        <target>创建机构和项目</target>
+      </trans-unit>
+      <trans-unit id="common.org-name" datatype="html">
+        <source>Organization name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/onboarding/steps/steps.component.html</context>
+          <context context-type="linenumber">12</context>
+        </context-group>
+        <target>机构名称</target>
+      </trans-unit>
+      <trans-unit id="common.project-name" datatype="html">
+        <source>Project name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/onboarding/steps/steps.component.html</context>
+          <context context-type="linenumber">16</context>
+        </context-group>
+        <target>项目名称</target>
+      </trans-unit>
+      <trans-unit id="common.complete" datatype="html">
+        <source>Complete</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/onboarding/steps/steps.component.html</context>
+          <context context-type="linenumber">25</context>
+        </context-group>
+        <target>完成</target>
+      </trans-unit>
+      <trans-unit id="org.org.orgName" datatype="html">
+        <source>Name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">3</context>
+        </context-group>
+        <target>机构名称</target>
+      </trans-unit>
+      <trans-unit id="5243233792859835904" datatype="html">
+        <source>Organization name</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">8</context>
+        </context-group>
+        <note priority="1" from="description">@org.org.orgNamePlaceholder</note>
+        <target>机构名称</target>
+      </trans-unit>
+      <trans-unit id="org.org.updateOrgName" datatype="html">
+        <source>Update</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">17</context>
+        </context-group>
+        <target>更新名称</target>
+      </trans-unit>
+      <trans-unit id="org.org.switchorg" datatype="html">
+        <source>Switch organization</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">22</context>
+        </context-group>
+        <target>切换机构</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.inherited-policies" datatype="html">
-        <source>Inherited policies from groups</source>
-        <target>继承自组的策略</target>
+      <trans-unit id="org.org.selectOrg" datatype="html">
+        <source>Select organization</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/details.component.html</context>
-          <context context-type="linenumber">19</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.html</context>
+          <context context-type="linenumber">24</context>
         </context-group>
+        <target>选择机构</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.dp-filter-placeholder" datatype="html">
-        <source>Filter by policy name</source>
-        <target>按策略名称查找</target>
+      <trans-unit id="org.org.orgNameUpdateSuccess" datatype="html">
+        <source>Organization name updated!</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
-          <context context-type="linenumber">6</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/organization/organization.component.ts</context>
+          <context context-type="linenumber">91</context>
         </context-group>
+        <target>机构名称更新成功！</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.all-policies" datatype="html">
-        <source>All policies</source>
-        <target>所有策略</target>
+      <trans-unit id="org.org.tabtitle" datatype="html">
+        <source>Organization</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
-          <context context-type="linenumber">13</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/organizations.component.html</context>
+          <context context-type="linenumber">4</context>
         </context-group>
+        <target>机构</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.current-policies" datatype="html">
-        <source>Policies binded to current team member</source>
-        <target>当前成员所拥有的策略</target>
+      <trans-unit id="org.project.tabtitle" datatype="html">
+        <source>Projects</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
-          <context context-type="linenumber">14</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/organizations.component.html</context>
+          <context context-type="linenumber">11</context>
         </context-group>
+        <target>项目</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.remove-policy-from" datatype="html">
-        <source>Are you sure to remove the policy from the member?</source>
-        <target>确定将策略从当前成员移除吗？</target>
+      <trans-unit id="org.profile.tabtitle" datatype="html">
+        <source>Profile</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/direct-policies/direct-policies.component.html</context>
-          <context context-type="linenumber">50</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/organizations.component.html</context>
+          <context context-type="linenumber">18</context>
         </context-group>
+        <target>个人信息</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.group-filter-placeholder" datatype="html">
-        <source>Filter by group name</source>
-        <target>按名称查找</target>
+      <trans-unit id="org.profile.email" datatype="html">
+        <source>Email</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
-          <context context-type="linenumber">5</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.html</context>
+          <context context-type="linenumber">4</context>
         </context-group>
+        <target>邮箱</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.all-groups" datatype="html">
-        <source>All groups</source>
-        <target>所有组</target>
+      <trans-unit id="org.profile.emailMandatory" datatype="html">
+        <source>Email is mandatory!</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
-          <context context-type="linenumber">11</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.html</context>
+          <context context-type="linenumber">5</context>
         </context-group>
+        <target>邮箱不能为空</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.current-groups" datatype="html">
-        <source>Groups including current team member</source>
-        <target>当前用户所在的组</target>
+      <trans-unit id="org.profile.emailPlaceholder" datatype="html">
+        <source>Email</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
-          <context context-type="linenumber">12</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.html</context>
+          <context context-type="linenumber">7</context>
         </context-group>
+        <target>邮箱</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.remove-member-from" datatype="html">
-        <source>Are you sure to remove the member from group: </source>
-        <target>确定将该用户从</target>
+      <trans-unit id="org.profile.save" datatype="html">
+        <source>Save</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
-          <context context-type="linenumber">49</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.html</context>
+          <context context-type="linenumber">16</context>
         </context-group>
+        <target>保存</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.remove-member-from-suffix" datatype="html">
-        <source>?</source>
-        <target>组中移除么？</target>
+      <trans-unit id="org.profile.notProvided" datatype="html">
+        <source>Not provided</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/groups/groups.component.html</context>
-          <context context-type="linenumber">49</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.ts</context>
+          <context context-type="linenumber">26</context>
         </context-group>
+        <target>未关联</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.ip-filter-placeholder" datatype="html">
-        <source>Filter by policy name</source>
-        <target>按名称查找</target>
+      <trans-unit id="org.profile.profileUpdateSuccess" datatype="html">
+        <source>Profile successfully updated</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/inherited-policies/inherited-policies.component.html</context>
-          <context context-type="linenumber">5</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.ts</context>
+          <context context-type="linenumber">45</context>
         </context-group>
+        <target>个人信息更新成功</target>
       </trans-unit>
-      <trans-unit id="iam.team.details.name-placeholder" datatype="html">
-        <source>Name</source>
-        <target>名称</target>
+      <trans-unit id="org.profile.featureUnderConstruction" datatype="html">
+        <source>This feature will be released soon!</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/details/setting/setting.component.html</context>
-          <context context-type="linenumber">17</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/profile/profile.component.ts</context>
+          <context context-type="linenumber">50</context>
         </context-group>
+        <target>该功能正在开发中</target>
       </trans-unit>
-      <trans-unit id="iam.team.idx.searchPlaceholder" datatype="html">
-        <source>Filter by mobile or Email</source>
-        <target>按电话或邮箱筛选</target>
+      <trans-unit id="org.project.projectFilterPlacehoder" datatype="html">
+        <source>Filter by name</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">4</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">5</context>
         </context-group>
+        <target>按名称查找</target>
       </trans-unit>
-      <trans-unit id="iam.team.idx.add" datatype="html">
-        <source>Add</source>
-        <target>添加</target>
+      <trans-unit id="org.project.envName" datatype="html">
+        <source>Environment name</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">11</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">25</context>
         </context-group>
+        <target>环境名称</target>
       </trans-unit>
-      <trans-unit id="iam.team.idx.group" datatype="html">
-        <source>Group</source>
-        <target>组</target>
+      <trans-unit id="org.project.description" datatype="html">
+        <source>Description</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">33</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">29</context>
         </context-group>
+        <target>描述</target>
       </trans-unit>
-      <trans-unit id="iam.team.idx.initial-password" datatype="html">
-        <source>Initial password</source>
-        <target>初始密码</target>
+      <trans-unit id="org.project.secret" datatype="html">
+        <source>Secret</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">34</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">35</context>
         </context-group>
+        <target>Secret</target>
       </trans-unit>
-      <trans-unit id="iam.team.idx.etc" datatype="html">
-        <source>+</source>
-        <target>及另外</target>
+      <trans-unit id="org.project.edit" datatype="html">
+        <source>Edit</source>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">53</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">48</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="iam.team.idx.entries" datatype="html">
-        <source>more</source>
-        <target>项</target>
         <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/iam/team/index/index.component.html</context>
-          <context context-type="linenumber">53</context>
+          <context context-type="sourcefile">src/app/features/safe/organizations/project/project.component.html</context>
+          <context context-type="linenumber">70</context>
         </context-group>
+        <target>编辑</target>
       </trans-unit>
       <trans-unit id="segments" datatype="html">
         <source>Segments</source>
-        <target>用户组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe-routing.module.ts</context>
           <context context-type="linenumber">26</context>
         </context-group>
+        <target>用户组</target>
       </trans-unit>
       <trans-unit id="ff-archive" datatype="html">
         <source>Archived feature flags</source>
-        <target>开关存档</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe-routing.module.ts</context>
           <context context-type="linenumber">33</context>
         </context-group>
+        <target>开关存档</target>
       </trans-unit>
       <trans-unit id="experiments" datatype="html">
         <source>Experiments</source>
-        <target>数据实验</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe-routing.module.ts</context>
           <context context-type="linenumber">40</context>
         </context-group>
+        <target>数据实验</target>
       </trans-unit>
       <trans-unit id="data-sync" datatype="html">
         <source>Data sync</source>
-        <target>数据同步</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe-routing.module.ts</context>
           <context context-type="linenumber">47</context>
         </context-group>
+        <target>数据同步</target>
       </trans-unit>
       <trans-unit id="organization" datatype="html">
         <source>Organization</source>
-        <target>组织机构</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe-routing.module.ts</context>
           <context context-type="linenumber">54</context>
         </context-group>
+        <target>组织机构</target>
       </trans-unit>
       <trans-unit id="iam" datatype="html">
         <source>IAM</source>
-        <target>权限管理</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe-routing.module.ts</context>
           <context context-type="linenumber">62</context>
         </context-group>
+        <target>权限管理</target>
       </trans-unit>
       <trans-unit id="menu.FF" datatype="html">
         <source>Feature flags</source>
-        <target>开关管理</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">43,42</context>
         </context-group>
+        <target>开关管理</target>
       </trans-unit>
       <trans-unit id="menu.archivedFF" datatype="html">
         <source>Archived feature flags</source>
-        <target>开关存档</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">48,47</context>
         </context-group>
+        <target>开关存档</target>
       </trans-unit>
       <trans-unit id="menu.users" datatype="html">
         <source>Users</source>
-        <target>用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">53,52</context>
         </context-group>
+        <target>用户</target>
       </trans-unit>
       <trans-unit id="menu.segments" datatype="html">
         <source>Segments</source>
-        <target>用户组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">58,57</context>
         </context-group>
+        <target>用户组</target>
+      </trans-unit>
+      <trans-unit id="menu.experiments" datatype="html">
+        <source>Experiments</source>
+        <context-group purpose="location">
+          <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
+          <context context-type="linenumber">63,62</context>
+        </context-group>
+        <target>数据实验</target>
       </trans-unit>
       <trans-unit id="menu.data-sync" datatype="html">
         <source>Data sync</source>
-        <target>数据同步</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">68,67</context>
         </context-group>
+        <target>数据同步</target>
       </trans-unit>
       <trans-unit id="menu.organization" datatype="html">
-        <source>Orgnization</source>
-        <target>机构管理</target>
+        <source>Organization</source>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">76,75</context>
         </context-group>
+        <target>机构管理</target>
       </trans-unit>
       <trans-unit id="menu.iam" datatype="html">
         <source>IAM</source>
-        <target>权限管理</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">81,80</context>
         </context-group>
+        <target>权限管理</target>
       </trans-unit>
       <trans-unit id="menu.iam.team" datatype="html">
         <source>Team</source>
-        <target>团队</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">86,85</context>
         </context-group>
+        <target>团队</target>
       </trans-unit>
       <trans-unit id="menu.iam.group" datatype="html">
         <source>Groups</source>
-        <target>组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">91,90</context>
         </context-group>
+        <target>组</target>
       </trans-unit>
       <trans-unit id="menu.iam.policies" datatype="html">
         <source>Policies</source>
-        <target>策略</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/safe.component.ts</context>
           <context context-type="linenumber">96,95</context>
         </context-group>
+        <target>策略</target>
       </trans-unit>
       <trans-unit id="segment.remove-segment" datatype="html">
         <source>Remove segment</source>
-        <target>删除用户组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
           <context context-type="linenumber">34</context>
@@ -4358,10 +4696,10 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">96</context>
         </context-group>
+        <target>删除用户组</target>
       </trans-unit>
       <trans-unit id="common.segment" datatype="html">
         <source>Segment</source>
-        <target>用户组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
           <context context-type="linenumber">51</context>
@@ -4370,18 +4708,18 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">100</context>
         </context-group>
+        <target>用户组</target>
       </trans-unit>
       <trans-unit id="common.permanent-remove-msg" datatype="html">
         <source>will be permanently removed, this operation cannot be recovered!</source>
-        <target>将被永久删除，且删除后不可恢复！</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
           <context context-type="linenumber">53</context>
         </context-group>
+        <target>将被永久删除，且删除后不可恢复！</target>
       </trans-unit>
       <trans-unit id="segment.segment-used-by" datatype="html">
         <source>This segment is used by following</source>
-        <target>该用户组在下边列出的</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
           <context context-type="linenumber">59</context>
@@ -4390,10 +4728,10 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">108</context>
         </context-group>
+        <target>该用户组在下边列出的</target>
       </trans-unit>
       <trans-unit id="segment.num-segment-remove-to-use" datatype="html">
         <source>segment(s), remove all references before the segment can be safely removed!</source>
-        <target>个开关中被引用，移除所有引用后方可删除！</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/setting/setting.component.html</context>
           <context context-type="linenumber">61</context>
@@ -4402,146 +4740,138 @@
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">110</context>
         </context-group>
+        <target>个开关中被引用，移除所有引用后方可删除！</target>
       </trans-unit>
       <trans-unit id="segment.details.segment-not-used" datatype="html">
         <source>This segment is not used by any feature flag</source>
-        <target>该用户组没有被任何开关引用</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
           <context context-type="linenumber">4</context>
         </context-group>
+        <target>该用户组没有被任何开关引用</target>
       </trans-unit>
       <trans-unit id="segment.details.this-segment" datatype="html">
         <source>This segment is used by</source>
-        <target>该用户组在</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
           <context context-type="linenumber">7</context>
         </context-group>
+        <target>该用户组在</target>
       </trans-unit>
       <trans-unit id="segment.details.num-ff" datatype="html">
         <source>feature flag(s)</source>
-        <target>个开关中被引用</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
           <context context-type="linenumber">9</context>
         </context-group>
+        <target>个开关中被引用</target>
       </trans-unit>
       <trans-unit id="common.targeting-users" datatype="html">
         <source>Targeting users</source>
-        <target>目标用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
           <context context-type="linenumber">29</context>
         </context-group>
+        <target>目标用户</target>
       </trans-unit>
       <trans-unit id="common.including-users" datatype="html">
         <source>Including users</source>
-        <target>包含用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
           <context context-type="linenumber">38</context>
         </context-group>
+        <target>包含用户</target>
       </trans-unit>
       <trans-unit id="common.excluding-users" datatype="html">
         <source>Excluding users</source>
-        <target>不包含用户</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
           <context context-type="linenumber">49</context>
         </context-group>
+        <target>不包含用户</target>
       </trans-unit>
       <trans-unit id="common.rules" datatype="html">
         <source>Rules</source>
-        <target>规则</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/details/targeting/targeting.component.html</context>
           <context context-type="linenumber">61</context>
         </context-group>
+        <target>规则</target>
       </trans-unit>
       <trans-unit id="segment.idx.filter-by-name" datatype="html">
         <source>Filter by name</source>
-        <target>按名字查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">5</context>
         </context-group>
+        <target>按名字查找</target>
       </trans-unit>
       <trans-unit id="segment.idx.add-segment" datatype="html">
         <source>Add segment</source>
-        <target>新建用户组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">58</context>
         </context-group>
+        <target>新建用户组</target>
       </trans-unit>
       <trans-unit id="common.name-unavailable" datatype="html">
         <source>This name is unavailable</source>
-        <target>该名称已被使用</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">68</context>
         </context-group>
-      </trans-unit>
-      <trans-unit id="common.name-validation-failed" datatype="html">
-        <source>Name validation failed</source>
-        <target>名称校验失败</target>
-        <context-group purpose="location">
-          <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
-          <context context-type="linenumber">69</context>
-        </context-group>
+        <target>该名称已被使用</target>
       </trans-unit>
       <trans-unit id="segment.permanent-remove-msg" datatype="html">
         <source>will be permanently removed, this operation cannot be recovered!</source>
-        <target>将被永久删除，且删除后不可恢复！</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/index/index.component.html</context>
           <context context-type="linenumber">102</context>
         </context-group>
+        <target>将被永久删除，且删除后不可恢复！</target>
       </trans-unit>
       <trans-unit id="segments.segments" datatype="html">
         <source>Segments</source>
-        <target>用户组</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/segments/segments-routing.module.ts</context>
           <context context-type="linenumber">9</context>
         </context-group>
+        <target>用户组</target>
       </trans-unit>
       <trans-unit id="users.details.filter-by-property-name-or-value" datatype="html">
         <source>Filter by property name or value</source>
-        <target>按属性名或属性值查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/users/details/details.component.html</context>
           <context context-type="linenumber">6</context>
         </context-group>
+        <target>按属性名或属性值查找</target>
       </trans-unit>
       <trans-unit id="users.details.property-value" datatype="html">
         <source>Value</source>
-        <target>属性值</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/users/details/details.component.html</context>
           <context context-type="linenumber">18</context>
         </context-group>
+        <target>属性值</target>
       </trans-unit>
       <trans-unit id="users.idx.filter-by-property" datatype="html">
         <source>Filter by property</source>
-        <target>按属性查找</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">6</context>
         </context-group>
+        <target>按属性查找</target>
       </trans-unit>
       <trans-unit id="users.idx.select-properties-to-search" datatype="html">
         <source>Select properties to search</source>
-        <target>选择要搜索的属性</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">14</context>
         </context-group>
+        <target>选择要搜索的属性</target>
       </trans-unit>
       <trans-unit id="users.idx.all-selected-items" datatype="html">
         <source>All</source>
-        <target>所有选项</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">30</context>
@@ -4550,10 +4880,10 @@
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">65</context>
         </context-group>
+        <target>所有选项</target>
       </trans-unit>
       <trans-unit id="users.idx.etc" datatype="html">
         <source>+</source>
-        <target>及另外</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">32</context>
@@ -4562,10 +4892,10 @@
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">67</context>
         </context-group>
+        <target>及另外</target>
       </trans-unit>
       <trans-unit id="users.idx.entries" datatype="html">
         <source>more</source>
-        <target>个</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">32</context>
@@ -4574,22 +4904,23 @@
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">67</context>
         </context-group>
+        <target>个</target>
       </trans-unit>
       <trans-unit id="users.idx.select-columns-to-add" datatype="html">
         <source>Add columns</source>
-        <target>选择要在表格中额外显示的列</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">49</context>
         </context-group>
+        <target>选择要在表格中额外显示的列</target>
       </trans-unit>
       <trans-unit id="users.idx.manage-properties" datatype="html">
         <source>Manage properties</source>
-        <target>属性管理</target>
         <context-group purpose="location">
           <context context-type="sourcefile">src/app/features/safe/users/index/index.component.html</context>
           <context context-type="linenumber">91</context>
         </context-group>
+        <target>属性管理</target>
       </trans-unit>
     </body>
   </file>


Test patch:
diff --git a/modules/back-end/tests/Application.IntegrationTests/Snapshots/BasicControllerTests.Authorized.verified.txt b/modules/back-end/tests/Application.IntegrationTests/Snapshots/BasicControllerTests.Authorized.verified.txt
index 977cd412e..5f41d3cb9 100644
--- a/modules/back-end/tests/Application.IntegrationTests/Snapshots/BasicControllerTests.Authorized.verified.txt
+++ b/modules/back-end/tests/Application.IntegrationTests/Snapshots/BasicControllerTests.Authorized.verified.txt
@@ -10,7 +10,7 @@
     },
     Value: {
       data: {
-        id: id
+        id: Guid_1
       },
       errors: [],
       success: true
diff --git a/modules/back-end/tests/Application.IntegrationTests/Snapshots/BasicControllerTests.NeedAuthentication.verified.txt b/modules/back-end/tests/Application.IntegrationTests/Snapshots/BasicControllerTests.NeedAuthentication.verified.txt
index d6c331576..9900f0b4c 100644
--- a/modules/back-end/tests/Application.IntegrationTests/Snapshots/BasicControllerTests.NeedAuthentication.verified.txt
+++ b/modules/back-end/tests/Application.IntegrationTests/Snapshots/BasicControllerTests.NeedAuthentication.verified.txt
@@ -11,7 +11,7 @@
     Value: {
       data: null,
       errors: [
-        authentication failed
+        Unauthorized
       ],
       success: false
     }
diff --git a/modules/back-end/tests/Application.IntegrationTests/Snapshots/UserControllerTests.GetUserProfile.verified.txt b/modules/back-end/tests/Application.IntegrationTests/Snapshots/UserControllerTests.GetUserProfile.verified.txt
new file mode 100644
index 000000000..f4afabf6c
--- /dev/null
+++ b/modules/back-end/tests/Application.IntegrationTests/Snapshots/UserControllerTests.GetUserProfile.verified.txt
@@ -0,0 +1,26 @@
+﻿{
+  Version: 1.1,
+  Status: 200 OK,
+  Headers: {
+    api-supported-versions: 1.0
+  },
+  Content: {
+    Headers: {
+      Content-Type: application/json; charset=utf-8
+    },
+    Value: {
+      data: {
+        email: test@email.com,
+        id: Guid_1
+      },
+      errors: [],
+      success: true
+    }
+  },
+  Request: {
+    Uri: http://localhost/api/v1/user/profile,
+    Headers: {
+      Authorization: Bearer [Scrubbed Token]
+    }
+  }
+}
\ No newline at end of file
diff --git a/modules/back-end/tests/Application.IntegrationTests/Snapshots/UserControllerTests.GetUserProfile_NotExist.verified.txt b/modules/back-end/tests/Application.IntegrationTests/Snapshots/UserControllerTests.GetUserProfile_NotExist.verified.txt
new file mode 100644
index 000000000..716259e4e
--- /dev/null
+++ b/modules/back-end/tests/Application.IntegrationTests/Snapshots/UserControllerTests.GetUserProfile_NotExist.verified.txt
@@ -0,0 +1,28 @@
+﻿{
+  Version: 1.1,
+  Status: 404 Not Found,
+  Headers: {
+    api-supported-versions: 1.0,
+    Cache-Control: no-store, no-cache,
+    Pragma: no-cache
+  },
+  Content: {
+    Headers: {
+      Content-Type: application/json; charset=utf-8,
+      Expires: -1
+    },
+    Value: {
+      data: null,
+      errors: [
+        ResourceNotFound
+      ],
+      success: false
+    }
+  },
+  Request: {
+    Uri: http://localhost/api/v1/user/profile,
+    Headers: {
+      Authorization: Bearer [Scrubbed Token]
+    }
+  }
+}
\ No newline at end of file
diff --git a/modules/back-end/tests/Application.IntegrationTests/Stubs/InMemoryUserStore.cs b/modules/back-end/tests/Application.IntegrationTests/Stubs/InMemoryUserStore.cs
index 63c12dbd4..d3f06d448 100644
--- a/modules/back-end/tests/Application.IntegrationTests/Stubs/InMemoryUserStore.cs
+++ b/modules/back-end/tests/Application.IntegrationTests/Stubs/InMemoryUserStore.cs
@@ -3,19 +3,6 @@
 
 namespace Application.IntegrationTests.Stubs;
 
-public class TestUser
-{
-    public const string Id = "id";
-    public const string Email = "test@email.com";
-    public const string RealPassword = "pwd";
-    public const string HashedPassword = "hashed-pwd";
-
-    public static User Instance()
-    {
-        return new User(Id, Email, HashedPassword);
-    }
-}
-
 public class InMemoryUserStore : IUserStore
 {
     private readonly List<User> _users = new()
@@ -23,6 +10,11 @@ public class InMemoryUserStore : IUserStore
         TestUser.Instance()
     };
 
+    public Task<User?> FindByIdAsync(Guid id)
+    {
+        return Task.FromResult(_users.FirstOrDefault(x => x.Id == id));
+    }
+
     public Task<bool> UpdateAsync(User user)
     {
         _users.RemoveAll(x => x.Id == user.Id);
diff --git a/modules/back-end/tests/Application.IntegrationTests/Stubs/TestCurrentUser.cs b/modules/back-end/tests/Application.IntegrationTests/Stubs/TestCurrentUser.cs
new file mode 100644
index 000000000..03e850e1c
--- /dev/null
+++ b/modules/back-end/tests/Application.IntegrationTests/Stubs/TestCurrentUser.cs
@@ -0,0 +1,13 @@
+using Application.Users;
+
+namespace Application.IntegrationTests.Stubs;
+
+public class TestCurrentUser : ICurrentUser
+{
+    public Guid Id { get; }
+
+    public TestCurrentUser(Guid id)
+    {
+        Id = id;
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/tests/Application.IntegrationTests/Stubs/TestUser.cs b/modules/back-end/tests/Application.IntegrationTests/Stubs/TestUser.cs
new file mode 100644
index 000000000..aa567eb32
--- /dev/null
+++ b/modules/back-end/tests/Application.IntegrationTests/Stubs/TestUser.cs
@@ -0,0 +1,16 @@
+using Domain.Users;
+
+namespace Application.IntegrationTests.Stubs;
+
+public class TestUser
+{
+    public static readonly Guid Id = new("d082c894-d9b5-4846-99e9-ae27ab7d247d");
+    public const string Email = "test@email.com";
+    public const string RealPassword = "pwd";
+    public const string HashedPassword = "hashed-pwd";
+
+    public static User Instance()
+    {
+        return new User(Id, Email, HashedPassword);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/tests/Application.IntegrationTests/TestApp.cs b/modules/back-end/tests/Application.IntegrationTests/TestApp.cs
index a4223e5b6..79ceabfe1 100644
--- a/modules/back-end/tests/Application.IntegrationTests/TestApp.cs
+++ b/modules/back-end/tests/Application.IntegrationTests/TestApp.cs
@@ -3,6 +3,7 @@
 using System.Text;
 using System.Text.Json;
 using Application.Services;
+using Domain.Users;
 using Microsoft.AspNetCore.Authentication.JwtBearer;
 using Microsoft.AspNetCore.Mvc.Testing;
 using Microsoft.Extensions.DependencyInjection;
@@ -38,14 +39,20 @@ public async Task<HttpResponseMessage> PostAsync(
 
         return await client.PostAsync(uri, content);
     }
-
-    private void AddAuthorizationHeader(HttpClient client)
+    
+    public string GetToken(User user)
     {
         var scopeFactory = Services.GetRequiredService<IServiceScopeFactory>();
         using var scope = scopeFactory.CreateScope();
-
         var identityService = scope.ServiceProvider.GetRequiredService<IIdentityService>();
-        var token = identityService.IssueToken(TestUser.Instance());
+
+        var token = identityService.IssueToken(user);
+        return token;
+    }
+
+    private void AddAuthorizationHeader(HttpClient client)
+    {
+        var token = GetToken(TestUser.Instance());
         client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
             JwtBearerDefaults.AuthenticationScheme, token
         );
diff --git a/modules/back-end/tests/Application.IntegrationTests/Users/UserApp.cs b/modules/back-end/tests/Application.IntegrationTests/Users/UserApp.cs
new file mode 100644
index 000000000..b442f6394
--- /dev/null
+++ b/modules/back-end/tests/Application.IntegrationTests/Users/UserApp.cs
@@ -0,0 +1,26 @@
+using Application.Users;
+using Infrastructure.Users;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+
+namespace Application.IntegrationTests.Users;
+
+public class UserApp : TestApp
+{
+    protected override void ConfigureWebHost(IWebHostBuilder builder)
+    {
+        builder.ConfigureServices(collection =>
+        {
+            var userStore = new ServiceDescriptor(
+                typeof(IUserStore),
+                typeof(InMemoryUserStore),
+                ServiceLifetime.Scoped
+            );
+            var currentUser = ServiceDescriptor.Singleton<ICurrentUser>(new TestCurrentUser(TestUser.Id));
+
+            collection.Replace(userStore);
+            collection.Replace(currentUser);
+        });
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/tests/Application.IntegrationTests/Users/UserControllerTests.cs b/modules/back-end/tests/Application.IntegrationTests/Users/UserControllerTests.cs
new file mode 100644
index 000000000..78cb0d634
--- /dev/null
+++ b/modules/back-end/tests/Application.IntegrationTests/Users/UserControllerTests.cs
@@ -0,0 +1,45 @@
+using System.Net.Http.Headers;
+using Application.Users;
+using Domain.Users;
+using Microsoft.AspNetCore.TestHost;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+
+namespace Application.IntegrationTests.Users;
+
+[UsesVerify]
+public class UserControllerTests : IClassFixture<UserApp>
+{
+    private readonly UserApp _app;
+
+    public UserControllerTests(UserApp app)
+    {
+        _app = app;
+    }
+
+    [Fact]
+    public async Task GetUserProfile()
+    {
+        var response = await _app.GetAsync("/api/v1/user/profile");
+
+        await Verify(response);
+    }
+
+    [Fact]
+    public async Task GetUserProfile_NotExist()
+    {
+        var userNotExist = new User(Guid.NewGuid(), "email", "pwd");
+        var token = _app.GetToken(userNotExist);
+
+        var factory = _app.WithWebHostBuilder(builder => builder.ConfigureTestServices(collection =>
+        {
+            collection.Replace(ServiceDescriptor.Singleton<ICurrentUser>(new TestCurrentUser(userNotExist.Id)));
+        }));
+
+        var client = factory.CreateClient();
+        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
+        
+        var response = await client.GetAsync("/api/v1/user/profile");
+        await Verify(response);
+    }
+}
\ No newline at end of file
diff --git a/modules/back-end/tests/Application.UnitTests/Identity/IdentityServiceTests.cs b/modules/back-end/tests/Application.UnitTests/Identity/IdentityServiceTests.cs
index 838827ce8..69a5a17a2 100644
--- a/modules/back-end/tests/Application.UnitTests/Identity/IdentityServiceTests.cs
+++ b/modules/back-end/tests/Application.UnitTests/Identity/IdentityServiceTests.cs
@@ -35,7 +35,7 @@ public async Task CheckUserPassword()
         const string hashedPwd = "hashed-pwd";
         const string realPwd = "pwd";
 
-        var user = new User("id", "identity", hashedPwd);
+        var user = new User("identity", hashedPwd);
 
         _passwordHasherMock
             .Setup(x => x.VerifyHashedPassword(user, hashedPwd, realPwd))
@@ -51,7 +51,7 @@ public async Task LoginInByPassword()
         const string hashedPwd = "hashed-pwd";
         const string realPwd = "pwd";
 
-        var user = new User("id", "identity", hashedPwd);
+        var user = new User(Guid.NewGuid(), "identity", hashedPwd);
 
         _passwordHasherMock
             .Setup(x => x.VerifyHashedPassword(user, hashedPwd, realPwd))