forked from juspay/hyperswitch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
info.rs
219 lines (207 loc) · 9.04 KB
/
info.rs
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
use api_models::user_role::{GroupInfo, PermissionInfo};
use common_enums::PermissionGroup;
use strum::{EnumIter, IntoEnumIterator};
use super::{permission_groups::get_permissions_vec, permissions::Permission};
pub fn get_module_authorization_info() -> Vec<ModuleInfo> {
PermissionModule::iter()
.map(|module| ModuleInfo::new(&module))
.collect()
}
pub fn get_group_authorization_info() -> Vec<GroupInfo> {
PermissionGroup::iter()
.map(get_group_info_from_permission_group)
.collect()
}
pub fn get_permission_info_from_permissions(permissions: &[Permission]) -> Vec<PermissionInfo> {
permissions
.iter()
.map(|&per| PermissionInfo {
description: Permission::get_permission_description(&per),
enum_name: per.into(),
})
.collect()
}
// TODO: Deprecate once groups are stable
#[derive(PartialEq, EnumIter, Clone)]
pub enum PermissionModule {
Payments,
Refunds,
MerchantAccount,
Connectors,
Routing,
Analytics,
Mandates,
Customer,
Disputes,
ThreeDsDecisionManager,
SurchargeDecisionManager,
AccountCreate,
Payouts,
}
impl PermissionModule {
pub fn get_module_description(&self) -> &'static str {
match self {
Self::Payments => "Everything related to payments - like creating and viewing payment related information are within this module",
Self::Refunds => "Refunds module encompasses everything related to refunds - like creating and viewing payment related information",
Self::MerchantAccount => "Accounts module permissions allow the user to view and update account details, configure webhooks and much more",
Self::Connectors => "All connector related actions - like configuring new connectors, viewing and updating connector configuration lies with this module",
Self::Routing => "All actions related to new, active, and past routing stacks take place here",
Self::Analytics => "Permission to view and analyse the data relating to payments, refunds, sdk etc.",
Self::Mandates => "Everything related to mandates - like creating and viewing mandate related information are within this module",
Self::Customer => "Everything related to customers - like creating and viewing customer related information are within this module",
Self::Disputes => "Everything related to disputes - like creating and viewing dispute related information are within this module",
Self::ThreeDsDecisionManager => "View and configure 3DS decision rules configured for a merchant",
Self::SurchargeDecisionManager =>"View and configure surcharge decision rules configured for a merchant",
Self::AccountCreate => "Create new account within your organization",
Self::Payouts => "Everything related to payouts - like creating and viewing payout related information are within this module"
}
}
}
// TODO: Deprecate once groups are stable
pub struct ModuleInfo {
pub module: PermissionModule,
pub description: &'static str,
pub permissions: Vec<PermissionInfo>,
}
impl ModuleInfo {
pub fn new(module: &PermissionModule) -> Self {
let module_name = module.clone();
let description = module.get_module_description();
match module {
PermissionModule::Payments => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::PaymentRead,
Permission::PaymentWrite,
]),
},
PermissionModule::Refunds => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::RefundRead,
Permission::RefundWrite,
]),
},
PermissionModule::MerchantAccount => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::MerchantAccountRead,
Permission::MerchantAccountWrite,
]),
},
PermissionModule::Connectors => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::MerchantConnectorAccountRead,
Permission::MerchantConnectorAccountWrite,
]),
},
PermissionModule::Routing => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::RoutingRead,
Permission::RoutingWrite,
]),
},
PermissionModule::Analytics => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[Permission::Analytics]),
},
PermissionModule::Mandates => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::MandateRead,
Permission::MandateWrite,
]),
},
PermissionModule::Customer => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::CustomerRead,
Permission::CustomerWrite,
]),
},
PermissionModule::Disputes => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::DisputeRead,
Permission::DisputeWrite,
]),
},
PermissionModule::ThreeDsDecisionManager => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::ThreeDsDecisionManagerRead,
Permission::ThreeDsDecisionManagerWrite,
]),
},
PermissionModule::SurchargeDecisionManager => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::SurchargeDecisionManagerRead,
Permission::SurchargeDecisionManagerWrite,
]),
},
PermissionModule::AccountCreate => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::MerchantAccountCreate,
]),
},
PermissionModule::Payouts => Self {
module: module_name,
description,
permissions: get_permission_info_from_permissions(&[
Permission::PayoutRead,
Permission::PayoutWrite,
]),
},
}
}
}
fn get_group_info_from_permission_group(group: PermissionGroup) -> GroupInfo {
let description = get_group_description(group);
GroupInfo {
group,
description,
permissions: get_permission_info_from_permissions(get_permissions_vec(&group)),
}
}
fn get_group_description(group: PermissionGroup) -> &'static str {
match group {
PermissionGroup::OperationsView => {
"View Payments, Refunds, Payouts, Mandates, Disputes and Customers"
}
PermissionGroup::OperationsManage => {
"Create, modify and delete Payments, Refunds, Payouts, Mandates, Disputes and Customers"
}
PermissionGroup::ConnectorsView => {
"View connected Payment Processors, Payout Processors and Fraud & Risk Manager details"
}
PermissionGroup::ConnectorsManage => "Create, modify and delete connectors like Payment Processors, Payout Processors and Fraud & Risk Manager",
PermissionGroup::WorkflowsView => {
"View Routing, 3DS Decision Manager, Surcharge Decision Manager"
}
PermissionGroup::WorkflowsManage => {
"Create, modify and delete Routing, 3DS Decision Manager, Surcharge Decision Manager"
}
PermissionGroup::AnalyticsView => "View Analytics",
PermissionGroup::UsersView => "View Users",
PermissionGroup::UsersManage => "Manage and invite Users to the Team",
PermissionGroup::MerchantDetailsView => "View Merchant Details",
PermissionGroup::MerchantDetailsManage => "Create, modify and delete Merchant Details like api keys, webhooks, etc",
PermissionGroup::OrganizationManage => "Manage organization level tasks like create new Merchant accounts, Organization level roles, etc",
}
}