Private/ConvertTo-SortedPermission.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
function ConvertTo-SortedPermission {
    <#
    .SYNOPSIS
    Correctly sorts PAS Safe Permissions

    .DESCRIPTION
    Safe permissions should be sent to the API in a specific order.
    When given a hashtable of parameters as input, safe permission key
    value pairs are returned in the correct order and format for
    inclusion in request body.

    .PARAMETER Parameters
    The input parameters to filter for safe permissons

    .PARAMETER Gen1
    Format permission object for Gen1 Add Safe Member

    .PARAMETER Gen2
    Format permission object for Gen2 Add Safe Member

    .EXAMPLE
    $PSBoundParameters | ConvertTo-SortedPermission -Gen1

    Returns key value pairs for $PSBoundParameters which relate to Gen1 safe permissions

    .EXAMPLE
    $PSBoundParameters | ConvertTo-SortedPermission -Gen2

    Returns hashtable for $PSBoundParameters which formatted for Gen2 safe permissions

    #>

    [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'Permissions', Justification = 'False Positive')]
    [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', 'Gen1', Justification = 'False Positive')]
    [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', 'Gen2', Justification = 'False Positive')]
    [CmdletBinding()]
    param (
        [parameter(
            Mandatory = $false,
            ValueFromPipeline = $true
        )]
        [hashtable]$Parameters,

        [parameter(
            Mandatory = $true,
            ValueFromPipeline = $true,
            ParameterSetName = 'Gen1'
        )]
        [switch]$Gen1,

        [parameter(
            Mandatory = $true,
            ValueFromPipeline = $true,
            ParameterSetName = 'Gen2'
        )]
        [switch]$Gen2
    )

    begin {

        Switch ($PSCmdlet.ParameterSetName) {

            'Gen1' {
                $OrderedPermissions = [ordered]@{
                    UseAccounts                            = $false
                    RetrieveAccounts                       = $false
                    ListAccounts                           = $false
                    AddAccounts                            = $false
                    UpdateAccountContent                   = $false
                    UpdateAccountProperties                = $false
                    InitiateCPMAccountManagementOperations = $false
                    SpecifyNextAccountContent              = $false
                    RenameAccounts                         = $false
                    DeleteAccounts                         = $false
                    UnlockAccounts                         = $false
                    ManageSafe                             = $false
                    ManageSafeMembers                      = $false
                    BackupSafe                             = $false
                    ViewAuditLog                           = $false
                    ViewSafeMembers                        = $false
                    RequestsAuthorizationLevel             = 0
                    AccessWithoutConfirmation              = $false
                    CreateFolders                          = $false
                    DeleteFolders                          = $false
                    MoveAccountsAndFolders                 = $false
                }

                break
            }

            'Gen2' {
                $OrderedPermissions = [ordered]@{
                    useAccounts                            = $false
                    retrieveAccounts                       = $false
                    listAccounts                           = $false
                    addAccounts                            = $false
                    updateAccountContent                   = $false
                    updateAccountProperties                = $false
                    initiateCPMAccountManagementOperations = $false
                    specifyNextAccountContent              = $false
                    renameAccounts                         = $false
                    deleteAccounts                         = $false
                    unlockAccounts                         = $false
                    manageSafe                             = $false
                    manageSafeMembers                      = $false
                    backupSafe                             = $false
                    viewAuditLog                           = $false
                    viewSafeMembers                        = $false
                    accessWithoutConfirmation              = $false
                    createFolders                          = $false
                    deleteFolders                          = $false
                    moveAccountsAndFolders                 = $false
                    requestsAuthorizationLevel1            = $false
                    requestsAuthorizationLevel2            = $false
                }

                break
            }
        }


    }

    process {

        #Input parameters have been provided
        If ($null -ne $Parameters.Keys) {

            #For each Ordered Safe Member Permission
            $OrderedPermissions.keys | ForEach-Object {

                $Permissions = [ordered]@{ }

            } {

                #Parameter match
                If ($Parameters.ContainsKey($PSItem)) {

                    #Add to hash table in key/value pair
                    $Permissions.Add($PSItem, $Parameters[$PSItem])

                }

            } {

                If (($Permissions.Keys).count -gt 0) {

                    Switch ($PSCmdlet.ParameterSetName) {

                        'Gen1' {

                            #return permissions, in order
                            $Permissions.getenumerator() | ForEach-Object { $PSItem }

                            break

                        }

                        'Gen2' {

                            #return permissions, in order
                            $Permissions

                            break

                        }

                    }

                }

            }

        }

    }

    end {

    }

}