@quenty/permissionprovider 14.19.2 → 14.19.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [14.19.3](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@14.19.2...@quenty/permissionprovider@14.19.3) (2025-04-10)
7
+
8
+ **Note:** Version bump only for package @quenty/permissionprovider
9
+
10
+
11
+
12
+
13
+
6
14
  ## [14.19.2](https://github.com/Quenty/NevermoreEngine/compare/@quenty/permissionprovider@14.19.0...@quenty/permissionprovider@14.19.2) (2025-04-07)
7
15
 
8
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenty/permissionprovider",
3
- "version": "14.19.2",
3
+ "version": "14.19.3",
4
4
  "description": "Permission provider for Roblox, including authenticating against group membership",
5
5
  "keywords": [
6
6
  "Roblox",
@@ -25,20 +25,20 @@
25
25
  "Quenty"
26
26
  ],
27
27
  "dependencies": {
28
- "@quenty/baseobject": "^10.8.2",
29
- "@quenty/brio": "^14.17.2",
30
- "@quenty/grouputils": "^10.10.3",
31
- "@quenty/loader": "^10.8.2",
32
- "@quenty/maid": "^3.4.2",
33
- "@quenty/playerutils": "^8.17.2",
34
- "@quenty/promise": "^10.10.3",
35
- "@quenty/remoting": "^12.18.2",
36
- "@quenty/rx": "^13.17.2",
37
- "@quenty/servicebag": "^11.11.3",
38
- "@quenty/table": "^3.7.3"
28
+ "@quenty/baseobject": "^10.8.3",
29
+ "@quenty/brio": "^14.17.3",
30
+ "@quenty/grouputils": "^10.10.4",
31
+ "@quenty/loader": "^10.8.3",
32
+ "@quenty/maid": "^3.4.3",
33
+ "@quenty/playerutils": "^8.17.3",
34
+ "@quenty/promise": "^10.10.4",
35
+ "@quenty/remoting": "^12.18.3",
36
+ "@quenty/rx": "^13.17.3",
37
+ "@quenty/servicebag": "^11.11.4",
38
+ "@quenty/table": "^3.7.4"
39
39
  },
40
40
  "publishConfig": {
41
41
  "access": "public"
42
42
  },
43
- "gitHead": "64def70499ec067077ee39f279936b620b217847"
43
+ "gitHead": "b06c070ae91d5dab7bd8de6e290ad2caabb15d8f"
44
44
  }
@@ -17,8 +17,17 @@ local PermissionProviderClient = {}
17
17
  PermissionProviderClient.__index = PermissionProviderClient
18
18
  PermissionProviderClient.ClassName = "PermissionProviderClient"
19
19
 
20
- function PermissionProviderClient.new(remoteFunctionName)
21
- local self = setmetatable({}, PermissionProviderClient)
20
+ export type PermissionProviderClient = typeof(setmetatable(
21
+ {} :: {
22
+ _remoteFunctionName: string,
23
+ _remoteFunctionPromise: Promise.Promise<RemoteFunction>?,
24
+ _cachedAdminPromise: Promise.Promise<boolean>?,
25
+ },
26
+ {} :: typeof({ __index = PermissionProviderClient })
27
+ ))
28
+
29
+ function PermissionProviderClient.new(remoteFunctionName: string): PermissionProviderClient
30
+ local self: PermissionProviderClient = setmetatable({} :: any, PermissionProviderClient)
22
31
 
23
32
  self._remoteFunctionName = remoteFunctionName or PermissionProviderConstants.DEFAULT_REMOTE_FUNCTION_NAME
24
33
 
@@ -31,7 +40,10 @@ end
31
40
  @param player Player | nil
32
41
  @return Promise<boolean>
33
42
  ]=]
34
- function PermissionProviderClient:PromiseIsAdmin(player)
43
+ function PermissionProviderClient.PromiseIsAdmin(
44
+ self: PermissionProviderClient,
45
+ player: Player?
46
+ ): Promise.Promise<boolean>
35
47
  assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
36
48
 
37
49
  if player ~= nil then
@@ -46,29 +58,28 @@ function PermissionProviderClient:PromiseIsAdmin(player)
46
58
  return self._cachedAdminPromise
47
59
  end
48
60
 
49
- self._cachedAdminPromise = self:_promiseRemoteFunction()
50
- :Then(function(remoteFunction)
51
- return Promise.spawn(function(resolve, reject)
52
- local result = nil
53
- local ok, err = pcall(function()
54
- result = remoteFunction:InvokeServer()
55
- end)
56
- if not ok then
57
- return reject(err)
58
- end
59
-
60
- if type(result) ~= "boolean" then
61
- return reject("Got non-boolean from server")
62
- end
63
-
64
- return resolve(result)
61
+ self._cachedAdminPromise = self:_promiseRemoteFunction():Then(function(remoteFunction)
62
+ return Promise.spawn(function(resolve, reject)
63
+ local result = nil
64
+ local ok, err = pcall(function()
65
+ result = remoteFunction:InvokeServer()
65
66
  end)
67
+ if not ok then
68
+ return reject(err)
69
+ end
70
+
71
+ if type(result) ~= "boolean" then
72
+ return reject("Got non-boolean from server")
73
+ end
74
+
75
+ return resolve(result)
66
76
  end)
77
+ end)
67
78
 
68
- return self._cachedAdminPromise
79
+ return self._cachedAdminPromise :: any
69
80
  end
70
81
 
71
- function PermissionProviderClient:_promiseRemoteFunction()
82
+ function PermissionProviderClient._promiseRemoteFunction(self: PermissionProviderClient)
72
83
  if self._remoteFunctionPromise then
73
84
  return self._remoteFunctionPromise
74
85
  end
@@ -1,3 +1,4 @@
1
+ --!strict
1
2
  --[=[
2
3
  Utility functions to provide/configure a permission. See [BasePermissionProvider] and [PermissionService].
3
4
 
@@ -11,22 +12,44 @@ local PermissionProviderConstants = require("PermissionProviderConstants")
11
12
 
12
13
  local PermissionProviderUtils = {}
13
14
 
15
+ type GroupRankConfig_Input = {
16
+ groupId: number,
17
+ minAdminRequiredRank: number,
18
+ minCreatorRequiredRank: number,
19
+ remoteFunctionName: string?,
20
+ }
21
+
22
+ export type GroupRankConfig = {
23
+ type: "GroupRankConfigType",
24
+ } & GroupRankConfig_Input
25
+
26
+ export type SingleUserConfig_Input = {
27
+ userId: number,
28
+ remoteFunctionName: string?,
29
+ }
30
+
31
+ export type SingleUserConfig = {
32
+ type: "SingleUserConfigType",
33
+ } & SingleUserConfig_Input
34
+
35
+ export type PermissionProviderConfig = GroupRankConfig | SingleUserConfig
36
+
14
37
  --[=[
15
38
  Creates a group rank config
16
39
  @param config { groupId: number, minAdminRequiredRank: number, minCreatorRequiredRank: number }
17
40
  @return table
18
41
  ]=]
19
- function PermissionProviderUtils.createGroupRankConfig(config)
42
+ function PermissionProviderUtils.createGroupRankConfig(config: GroupRankConfig_Input): GroupRankConfig
20
43
  assert(type(config.groupId) == "number", "Bad groupId")
21
44
  assert(type(config.minCreatorRequiredRank) == "number", "Bad minCreatorRequiredRank")
22
45
  assert(type(config.minAdminRequiredRank) == "number", "Bad minAdminRequiredRank")
23
46
 
24
47
  return {
25
- type = PermissionProviderConstants.GROUP_RANK_CONFIG_TYPE;
26
- groupId = config.groupId;
27
- minAdminRequiredRank = config.minAdminRequiredRank;
28
- minCreatorRequiredRank = config.minCreatorRequiredRank;
29
- remoteFunctionName = config.remoteFunctionName or PermissionProviderConstants.DEFAULT_REMOTE_FUNCTION_NAME;
48
+ type = PermissionProviderConstants.GROUP_RANK_CONFIG_TYPE,
49
+ groupId = config.groupId,
50
+ minAdminRequiredRank = config.minAdminRequiredRank,
51
+ minCreatorRequiredRank = config.minCreatorRequiredRank,
52
+ remoteFunctionName = config.remoteFunctionName or PermissionProviderConstants.DEFAULT_REMOTE_FUNCTION_NAME,
30
53
  }
31
54
  end
32
55
 
@@ -35,13 +58,13 @@ end
35
58
  @param config { userId: number }
36
59
  @return table
37
60
  ]=]
38
- function PermissionProviderUtils.createSingleUserConfig(config)
61
+ function PermissionProviderUtils.createSingleUserConfig(config: SingleUserConfig_Input): SingleUserConfig
39
62
  assert(type(config.userId) == "number", "Bad userId")
40
63
 
41
64
  return {
42
- type = PermissionProviderConstants.SINGLE_USER_CONFIG_TYPE;
43
- userId = config.userId;
44
- remoteFunctionName = config.remoteFunctionName or PermissionProviderConstants.DEFAULT_REMOTE_FUNCTION_NAME;
65
+ type = PermissionProviderConstants.SINGLE_USER_CONFIG_TYPE,
66
+ userId = config.userId,
67
+ remoteFunctionName = config.remoteFunctionName or PermissionProviderConstants.DEFAULT_REMOTE_FUNCTION_NAME,
45
68
  }
46
69
  end
47
70
 
@@ -49,7 +72,7 @@ end
49
72
  Creates an automatic configuration from the game.
50
73
  @return table
51
74
  ]=]
52
- function PermissionProviderUtils.createConfigFromGame()
75
+ function PermissionProviderUtils.createConfigFromGame(): PermissionProviderConfig
53
76
  if game.CreatorType == Enum.CreatorType.Group then
54
77
  return PermissionProviderUtils.createGroupRankConfig({
55
78
  groupId = game.CreatorId;
@@ -35,24 +35,34 @@ local Rx = require("Rx")
35
35
  local RxBrioUtils = require("RxBrioUtils")
36
36
  local RxPlayerUtils = require("RxPlayerUtils")
37
37
  local PermissionLevelUtils = require("PermissionLevelUtils")
38
+ local _ServiceBag = require("ServiceBag")
39
+ local _Observable = require("Observable")
40
+ local _Brio = require("Brio")
41
+ local _BasePermissionProvider = require("BasePermissionProvider")
38
42
 
39
43
  local PermissionService = {}
40
44
  PermissionService.ServiceName = "PermissionService"
41
45
 
46
+ export type PermissionService = typeof(setmetatable(
47
+ {} :: {
48
+ _maid: Maid.Maid,
49
+ _promise: Promise.Promise<()>,
50
+ _provider: any,
51
+ },
52
+ {} :: typeof({ __index = PermissionService })
53
+ ))
54
+
42
55
  --[=[
43
56
  Initializes the service. Should be done via [ServiceBag].
44
57
  @param _serviceBag ServiceBag
45
58
  ]=]
46
- function PermissionService:Init(_serviceBag)
59
+ function PermissionService:Init(_serviceBag: _ServiceBag.ServiceBag)
47
60
  assert(not self._promise, "Already initialized")
48
61
  assert(not self._provider, "Already have provider")
49
62
 
50
63
  self._provider = nil
51
-
52
64
  self._maid = Maid.new()
53
-
54
- self._promise = Promise.new()
55
- self._maid:GiveTask(self._promise)
65
+ self._promise = self._maid:Add(Promise.new())
56
66
  end
57
67
 
58
68
  --[=[
@@ -61,7 +71,7 @@ end
61
71
 
62
72
  @param config { type: string }
63
73
  ]=]
64
- function PermissionService:SetProviderFromConfig(config)
74
+ function PermissionService:SetProviderFromConfig(config: PermissionProviderUtils.PermissionProviderConfig)
65
75
  assert(self._promise, "Not initialized")
66
76
  assert(not self._provider, "Already have provider set")
67
77
 
@@ -91,7 +101,7 @@ end
91
101
  Returns the permission provider
92
102
  @return Promise<BasePermissionProvider>
93
103
  ]=]
94
- function PermissionService:PromisePermissionProvider()
104
+ function PermissionService:PromisePermissionProvider(): Promise.Promise<_BasePermissionProvider.BasePermissionProvider>
95
105
  assert(self._promise, "Not initialized")
96
106
 
97
107
  return self._promise
@@ -102,7 +112,7 @@ end
102
112
  @param player Player
103
113
  @return Promise<boolean>
104
114
  ]=]
105
- function PermissionService:PromiseIsAdmin(player: Player)
115
+ function PermissionService:PromiseIsAdmin(player: Player): Promise.Promise<boolean>
106
116
  assert(typeof(player) == "Instance" and player:IsA("Player"), "bad player")
107
117
 
108
118
  return self:PromiseIsPermissionLevel(player, PermissionLevel.ADMIN)
@@ -113,7 +123,7 @@ end
113
123
  @param player Player
114
124
  @return Promise<boolean>
115
125
  ]=]
116
- function PermissionService:PromiseIsCreator(player: Player)
126
+ function PermissionService:PromiseIsCreator(player: Player): Promise.Promise<boolean>
117
127
  assert(typeof(player) == "Instance" and player:IsA("Player"), "bad player")
118
128
 
119
129
  return self:PromiseIsPermissionLevel(player, PermissionLevel.CREATOR)
@@ -125,7 +135,10 @@ end
125
135
  @param permissionLevel PermissionLevel
126
136
  @return Promise<boolean>
127
137
  ]=]
128
- function PermissionService:PromiseIsPermissionLevel(player: Player, permissionLevel)
138
+ function PermissionService:PromiseIsPermissionLevel(
139
+ player: Player,
140
+ permissionLevel: PermissionLevel.PermissionLevel
141
+ ): Promise.Promise<boolean>
129
142
  assert(typeof(player) == "Instance" and player:IsA("Player"), "bad player")
130
143
  assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
131
144
 
@@ -140,7 +153,7 @@ end
140
153
  @param permissionLevel PermissionLevel
141
154
  @return Observable<Brio<Player>>
142
155
  ]=]
143
- function PermissionService:ObservePermissionedPlayersBrio(permissionLevel)
156
+ function PermissionService:ObservePermissionedPlayersBrio(permissionLevel: PermissionLevel.PermissionLevel): _Observable.Observable<_Brio.Brio<Player>>
144
157
  assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
145
158
 
146
159
  return RxPlayerUtils.observePlayersBrio():Pipe({
@@ -1,3 +1,4 @@
1
+ --!strict
1
2
  --[=[
2
3
  Basic interface for providing permissions.
3
4
  @server
@@ -11,21 +12,32 @@ local GetRemoteFunction = require("GetRemoteFunction")
11
12
  local PermissionLevel = require("PermissionLevel")
12
13
  local PermissionLevelUtils = require("PermissionLevelUtils")
13
14
  local Table = require("Table")
15
+ local _Promise = require("Promise")
16
+ local _PermissionProviderUtils = require("PermissionProviderUtils")
14
17
 
15
18
  local BasePermissionProvider = setmetatable({}, BaseObject)
16
19
  BasePermissionProvider.ClassName = "BasePermissionProvider"
17
20
  BasePermissionProvider.__index = BasePermissionProvider
18
21
 
22
+ export type BasePermissionProvider = typeof(setmetatable(
23
+ {} :: {
24
+ _config: { remoteFunctionName: string },
25
+ _remoteFunctionName: string,
26
+ _remoteFunction: RemoteFunction?,
27
+ },
28
+ {} :: typeof({ __index = BasePermissionProvider })
29
+ )) & BaseObject.BaseObject
30
+
19
31
  --[=[
20
32
  Initializes a new permission provider
21
33
 
22
34
  @param config { remoteFunctionName: string }
23
35
  @return BasePermissionProvider
24
36
  ]=]
25
- function BasePermissionProvider.new(config)
26
- local self = setmetatable(BaseObject.new(), BasePermissionProvider)
37
+ function BasePermissionProvider.new(config: _PermissionProviderUtils.PermissionProviderConfig): BasePermissionProvider
38
+ local self: BasePermissionProvider = setmetatable(BaseObject.new() :: any, BasePermissionProvider)
27
39
 
28
- self._config = Table.readonly(assert(config, "Bad config"))
40
+ self._config = Table.readonly(assert(config, "Bad config") :: any)
29
41
  self._remoteFunctionName = assert(self._config.remoteFunctionName, "Bad config")
30
42
 
31
43
  return self
@@ -34,13 +46,14 @@ end
34
46
  --[=[
35
47
  Starts the permission provider. Should be done via ServiceBag.
36
48
  ]=]
37
- function BasePermissionProvider:Start()
38
- assert(not self._remoteFunction, "No remoteFunction")
49
+ function BasePermissionProvider.Start(self: BasePermissionProvider): ()
50
+ assert(not (self :: any)._remoteFunction, "No remoteFunction")
39
51
 
40
- self._remoteFunction = GetRemoteFunction(self._remoteFunctionName)
41
- self._remoteFunction.OnServerInvoke = function(...)
52
+ local remoteFunction = GetRemoteFunction(self._remoteFunctionName)
53
+ remoteFunction.OnServerInvoke = function(...)
42
54
  return self:_onServerInvoke(...)
43
55
  end
56
+ self._remoteFunction = remoteFunction
44
57
  end
45
58
 
46
59
  --[=[
@@ -49,7 +62,11 @@ end
49
62
  @param permissionLevel PermissionLevel
50
63
  @return Promise<boolean>
51
64
  ]=]
52
- function BasePermissionProvider:PromiseIsPermissionLevel(player: Player, permissionLevel)
65
+ function BasePermissionProvider.PromiseIsPermissionLevel(
66
+ _self: BasePermissionProvider,
67
+ player: Player,
68
+ permissionLevel: PermissionLevel.PermissionLevel
69
+ ): _Promise.Promise<boolean>
53
70
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
54
71
  assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
55
72
 
@@ -62,7 +79,11 @@ end
62
79
  @param permissionLevel PermissionLevel
63
80
  @return Promise<boolean>
64
81
  ]=]
65
- function BasePermissionProvider:IsPermissionLevel(player: Player, permissionLevel): boolean
82
+ function BasePermissionProvider.IsPermissionLevel(
83
+ self: BasePermissionProvider,
84
+ player: Player,
85
+ permissionLevel: PermissionLevel.PermissionLevel
86
+ ): boolean
66
87
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
67
88
  assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
68
89
 
@@ -85,7 +106,10 @@ end
85
106
  @param player Player
86
107
  @return Promise<boolean>
87
108
  ]=]
88
- function BasePermissionProvider:PromiseIsCreator(player: Player)
109
+ function BasePermissionProvider.PromiseIsCreator(
110
+ self: BasePermissionProvider,
111
+ player: Player
112
+ ): _Promise.Promise<boolean>
89
113
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
90
114
 
91
115
  return self:PromiseIsPermissionLevel(player, PermissionLevel.CREATOR)
@@ -96,7 +120,7 @@ end
96
120
  @param player Player
97
121
  @return Promise<boolean>
98
122
  ]=]
99
- function BasePermissionProvider:PromiseIsAdmin(player: Player)
123
+ function BasePermissionProvider.PromiseIsAdmin(self: BasePermissionProvider, player: Player): _Promise.Promise<boolean>
100
124
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
101
125
 
102
126
  return self:PromiseIsPermissionLevel(player, PermissionLevel.ADMIN)
@@ -112,10 +136,10 @@ end
112
136
  @param player Player
113
137
  @return boolean
114
138
  ]=]
115
- function BasePermissionProvider:IsCreator(player: Player): boolean
139
+ function BasePermissionProvider.IsCreator(self: BasePermissionProvider, player: Player): boolean
116
140
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
117
141
 
118
- return self:IsCreator(player, PermissionLevel.CREATOR)
142
+ return self:IsPermissionLevel(player, PermissionLevel.CREATOR)
119
143
  end
120
144
 
121
145
  --[=[
@@ -128,13 +152,13 @@ end
128
152
  @param player Player
129
153
  @return boolean
130
154
  ]=]
131
- function BasePermissionProvider:IsAdmin(player: Player): boolean
155
+ function BasePermissionProvider.IsAdmin(self: BasePermissionProvider, player: Player): boolean
132
156
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
133
157
 
134
158
  return self:IsPermissionLevel(player, PermissionLevel.ADMIN)
135
159
  end
136
160
 
137
- function BasePermissionProvider:_onServerInvoke(player)
161
+ function BasePermissionProvider._onServerInvoke(self: BasePermissionProvider, player: Player): boolean
138
162
  local promise = self:PromiseIsAdmin(player)
139
163
  local ok, result = promise:Yield()
140
164
  if not ok then
@@ -145,5 +169,4 @@ function BasePermissionProvider:_onServerInvoke(player)
145
169
  return result and true or false
146
170
  end
147
171
 
148
-
149
172
  return BasePermissionProvider
@@ -1,3 +1,4 @@
1
+ --!strict
1
2
  --[=[
2
3
  Provides permissions from a single user creator
3
4
 
@@ -14,17 +15,27 @@ local PermissionProviderConstants = require("PermissionProviderConstants")
14
15
  local Promise = require("Promise")
15
16
  local PermissionLevel = require("PermissionLevel")
16
17
  local PermissionLevelUtils = require("PermissionLevelUtils")
18
+ local _PermissionProviderUtils = require("PermissionProviderUtils")
17
19
 
18
20
  local CreatorPermissionProvider = setmetatable({}, BasePermissionProvider)
19
21
  CreatorPermissionProvider.ClassName = "CreatorPermissionProvider"
20
22
  CreatorPermissionProvider.__index = CreatorPermissionProvider
21
23
 
24
+ export type CreatorPermissionProvider = typeof(setmetatable(
25
+ {} :: {
26
+ _config: _PermissionProviderUtils.SingleUserConfig,
27
+ _userId: number,
28
+ },
29
+ {} :: typeof({ __index = CreatorPermissionProvider })
30
+ )) & BasePermissionProvider.BasePermissionProvider
31
+
22
32
  --[=[
23
33
  @param config table
24
34
  @return CreatorPermissionProvider
25
35
  ]=]
26
- function CreatorPermissionProvider.new(config)
27
- local self = setmetatable(BasePermissionProvider.new(config), CreatorPermissionProvider)
36
+ function CreatorPermissionProvider.new(config: _PermissionProviderUtils.SingleUserConfig): CreatorPermissionProvider
37
+ local self: CreatorPermissionProvider =
38
+ setmetatable(BasePermissionProvider.new(config) :: any, CreatorPermissionProvider)
28
39
 
29
40
  assert(self._config.type == PermissionProviderConstants.SINGLE_USER_CONFIG_TYPE, "Bad configType")
30
41
  self._userId = assert(self._config.userId, "No userId")
@@ -39,7 +50,7 @@ end
39
50
  @param permissionLevel PermissionLevel
40
51
  @return Promise<boolean>
41
52
  ]=]
42
- function CreatorPermissionProvider:PromiseIsPermissionLevel(player, permissionLevel)
53
+ function CreatorPermissionProvider.PromiseIsPermissionLevel(self: CreatorPermissionProvider, player: Player, permissionLevel: PermissionLevel.PermissionLevel): Promise.Promise<boolean>
43
54
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
44
55
  assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
45
56
 
@@ -1,3 +1,4 @@
1
+ --!strict
1
2
  --[=[
2
3
  Provides permissions from a group
3
4
 
@@ -15,17 +16,31 @@ local PermissionLevel = require("PermissionLevel")
15
16
  local PermissionLevelUtils = require("PermissionLevelUtils")
16
17
  local PermissionProviderConstants = require("PermissionProviderConstants")
17
18
  local Promise = require("Promise")
19
+ local _PermissionProviderUtils = require("PermissionProviderUtils")
18
20
 
19
21
  local GroupPermissionProvider = setmetatable({}, BasePermissionProvider)
20
22
  GroupPermissionProvider.__index = GroupPermissionProvider
21
23
  GroupPermissionProvider.ClassName = "GroupPermissionProvider"
22
24
 
25
+ export type GroupPermissionProvider = typeof(setmetatable(
26
+ {} :: {
27
+ _config: _PermissionProviderUtils.GroupRankConfig,
28
+ _groupId: number,
29
+ _minAdminRequiredRank: number,
30
+ _minCreatorRequiredRank: number,
31
+ _adminsCache: { [number]: true },
32
+ _creatorCache: { [number]: true },
33
+ _promiseRankPromisesCache: { [number]: Promise.Promise<number> },
34
+ },
35
+ {} :: typeof({ __index = GroupPermissionProvider })
36
+ )) & BasePermissionProvider.BasePermissionProvider
37
+
23
38
  --[=[
24
39
  @param config table
25
40
  @return GroupPermissionProvider
26
41
  ]=]
27
- function GroupPermissionProvider.new(config)
28
- local self = setmetatable(BasePermissionProvider.new(config), GroupPermissionProvider)
42
+ function GroupPermissionProvider.new(config: _PermissionProviderUtils.GroupRankConfig): GroupPermissionProvider
43
+ local self = setmetatable(BasePermissionProvider.new(config) :: any, GroupPermissionProvider)
29
44
 
30
45
  assert(self._config.type == PermissionProviderConstants.GROUP_RANK_CONFIG_TYPE, "Bad configType")
31
46
 
@@ -40,12 +55,12 @@ end
40
55
  --[=[
41
56
  Starts the permission provider. Should be done via ServiceBag.
42
57
  ]=]
43
- function GroupPermissionProvider:Start()
58
+ function GroupPermissionProvider.Start(self: GroupPermissionProvider)
44
59
  assert(self._config, "Bad config")
45
60
 
46
61
  getmetatable(GroupPermissionProvider).Start(self)
47
62
 
48
- self._maid:GiveTask(Players.PlayerRemoving:Connect(function(player)
63
+ self._maid:GiveTask(Players.PlayerRemoving:Connect(function(player: Player)
49
64
  local userId = player.UserId
50
65
 
51
66
  self._adminsCache[userId] = nil
@@ -76,7 +91,11 @@ end
76
91
  @param permissionLevel PermissionLevel
77
92
  @return Promise<boolean>
78
93
  ]=]
79
- function GroupPermissionProvider:PromiseIsPermissionLevel(player: Player, permissionLevel)
94
+ function GroupPermissionProvider.PromiseIsPermissionLevel(
95
+ self: GroupPermissionProvider,
96
+ player: Player,
97
+ permissionLevel: PermissionLevel.PermissionLevel
98
+ ): Promise.Promise<boolean>
80
99
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
81
100
  assert(PermissionLevelUtils.isPermissionLevel(permissionLevel), "Bad permissionLevel")
82
101
 
@@ -89,7 +108,10 @@ function GroupPermissionProvider:PromiseIsPermissionLevel(player: Player, permis
89
108
  end
90
109
  end
91
110
 
92
- function GroupPermissionProvider:_promiseIsCreator(player: Player)
111
+ function GroupPermissionProvider._promiseIsCreator(
112
+ self: GroupPermissionProvider,
113
+ player: Player
114
+ ): Promise.Promise<boolean>
93
115
  assert(typeof(player) == "Instance" and player:IsA("Player"), "Bad player")
94
116
  assert(player:IsDescendantOf(game), "Bad player")
95
117
 
@@ -102,7 +124,10 @@ function GroupPermissionProvider:_promiseIsCreator(player: Player)
102
124
  end)
103
125
  end
104
126
 
105
- function GroupPermissionProvider:_promiseIsAdmin(player: Player)
127
+ function GroupPermissionProvider._promiseIsAdmin(
128
+ self: GroupPermissionProvider,
129
+ player: Player
130
+ ): Promise.Promise<boolean>
106
131
  assert(player:IsDescendantOf(game))
107
132
 
108
133
  -- really not saving much time.
@@ -119,7 +144,7 @@ function GroupPermissionProvider:_promiseIsAdmin(player: Player)
119
144
  end)
120
145
  end
121
146
 
122
- function GroupPermissionProvider:_handlePlayer(player: Player)
147
+ function GroupPermissionProvider._handlePlayer(self: GroupPermissionProvider, player: Player): ()
123
148
  assert(player, "Bad player")
124
149
 
125
150
  self:_promiseRankInGroup(player):Then(function(rank)
@@ -133,7 +158,7 @@ function GroupPermissionProvider:_handlePlayer(player: Player)
133
158
  end)
134
159
  end
135
160
 
136
- function GroupPermissionProvider:_promiseRankInGroup(player: Player)
161
+ function GroupPermissionProvider._promiseRankInGroup(self: GroupPermissionProvider, player: Player): Promise.Promise<number>
137
162
  assert(typeof(player) == "Instance", "Bad player")
138
163
 
139
164
  if self._promiseRankPromisesCache[player.UserId] then
@@ -1,3 +1,4 @@
1
+ --!strict
1
2
  --[=[
2
3
  @class PermissionLevel
3
4
  ]=]
@@ -6,7 +7,14 @@ local require = require(script.Parent.loader).load(script)
6
7
 
7
8
  local Table = require("Table")
8
9
 
10
+ export type PermissionLevel = "admin" | "creator"
11
+
12
+ export type PermissionLevelMap = {
13
+ ADMIN: "admin",
14
+ CREATOR: "creator",
15
+ }
16
+
9
17
  return Table.readonly({
10
- ADMIN = "admin";
11
- CREATOR = "creator";
12
- })
18
+ ADMIN = "admin",
19
+ CREATOR = "creator",
20
+ } :: PermissionLevelMap)
@@ -13,8 +13,11 @@ for _, item in PermissionLevel do
13
13
  ALLOWED[item] = true
14
14
  end
15
15
 
16
- function PermissionLevelUtils.isPermissionLevel(permissionLevel)
17
- return ALLOWED[permissionLevel]
16
+ --[=[
17
+ Returns true if a permission level
18
+ ]=]
19
+ function PermissionLevelUtils.isPermissionLevel(permissionLevel: any): boolean
20
+ return ALLOWED[permissionLevel] == true
18
21
  end
19
22
 
20
23
  return PermissionLevelUtils
@@ -7,10 +7,16 @@ local require = require(script.Parent.loader).load(script)
7
7
 
8
8
  local Table = require("Table")
9
9
 
10
+ export type PermissionProviderConstants = {
11
+ DEFAULT_REMOTE_FUNCTION_NAME: "PermissionProviderDefaultRemoteFunction",
12
+ GROUP_RANK_CONFIG_TYPE: "GroupRankConfigType",
13
+ SINGLE_USER_CONFIG_TYPE: "SingleUserConfigType",
14
+ }
15
+
10
16
  return Table.readonly({
11
- DEFAULT_REMOTE_FUNCTION_NAME = "PermissionProviderDefaultRemoteFunction";
17
+ DEFAULT_REMOTE_FUNCTION_NAME = "PermissionProviderDefaultRemoteFunction",
12
18
 
13
19
  -- types
14
- GROUP_RANK_CONFIG_TYPE = "GroupRankConfigType";
15
- SINGLE_USER_CONFIG_TYPE = "SingleUserConfigType";
16
- })
20
+ GROUP_RANK_CONFIG_TYPE = "GroupRankConfigType",
21
+ SINGLE_USER_CONFIG_TYPE = "SingleUserConfigType",
22
+ } :: PermissionProviderConstants)