Skip to content

Commit 5d8dcc5

Browse files
authored
Filter query results by the specified subject type(s) when selecting subjects (#283)
1 parent df258e0 commit 5d8dcc5

File tree

3 files changed

+210
-2
lines changed

3 files changed

+210
-2
lines changed

.golangci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ linters:
6363
linters-settings:
6464
goheader:
6565
template: |-
66-
Copyright {{YEAR-RANGE}} Forerunner Labs, Inc.
66+
Copyright 2023 Forerunner Labs, Inc.
6767
6868
Licensed under the Apache License, Version 2.0 (the "License");
6969
you may not use this file except in compliance with the License.

pkg/authz/query/service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ func (svc QueryService) matchRelation(ctx context.Context, selectSubjects bool,
345345
}
346346
}
347347
}
348-
} else if selectSubjects {
348+
} else if selectSubjects && matches(matchFilters.SubjectType, matchedWarrant.Subject.ObjectType) {
349349
resultSet.Add(matchedWarrant.Subject.ObjectType, matchedWarrant.Subject.ObjectId, matchedWarrant, level > 0)
350350
} else if matches(matchFilters.SubjectType, matchedWarrant.Subject.ObjectType) && matches(matchFilters.SubjectId, matchedWarrant.Subject.ObjectId) {
351351
resultSet.Add(matchedWarrant.ObjectType, matchedWarrant.ObjectId, matchedWarrant, level > 0)

tests/v2/query.json

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1792,6 +1792,214 @@
17921792
"expectedResponse": {
17931793
"statusCode": 200
17941794
}
1795+
},
1796+
{
1797+
"name": "assignRoleDeveloperMemberOfPermissionViewDocs",
1798+
"request": {
1799+
"method": "POST",
1800+
"url": "/v2/warrants",
1801+
"body": {
1802+
"objectType": "permission",
1803+
"objectId": "view-docs",
1804+
"relation": "member",
1805+
"subject": {
1806+
"objectType": "role",
1807+
"objectId": "developer"
1808+
}
1809+
}
1810+
},
1811+
"expectedResponse": {
1812+
"statusCode": 200,
1813+
"body": {
1814+
"objectType": "permission",
1815+
"objectId": "view-docs",
1816+
"relation": "member",
1817+
"subject": {
1818+
"objectType": "role",
1819+
"objectId": "developer"
1820+
}
1821+
}
1822+
}
1823+
},
1824+
{
1825+
"name": "assignRoleManagerMemberOfRoleDeveloper",
1826+
"request": {
1827+
"method": "POST",
1828+
"url": "/v2/warrants",
1829+
"body": {
1830+
"objectType": "role",
1831+
"objectId": "developer",
1832+
"relation": "member",
1833+
"subject": {
1834+
"objectType": "role",
1835+
"objectId": "manager"
1836+
}
1837+
}
1838+
},
1839+
"expectedResponse": {
1840+
"statusCode": 200,
1841+
"body": {
1842+
"objectType": "role",
1843+
"objectId": "developer",
1844+
"relation": "member",
1845+
"subject": {
1846+
"objectType": "role",
1847+
"objectId": "manager"
1848+
}
1849+
}
1850+
}
1851+
},
1852+
{
1853+
"name": "assignUserRichardMemberOfRoleDeveloper",
1854+
"request": {
1855+
"method": "POST",
1856+
"url": "/v2/warrants",
1857+
"body": {
1858+
"objectType": "role",
1859+
"objectId": "developer",
1860+
"relation": "member",
1861+
"subject": {
1862+
"objectType": "user",
1863+
"objectId": "richard"
1864+
}
1865+
}
1866+
},
1867+
"expectedResponse": {
1868+
"statusCode": 200,
1869+
"body": {
1870+
"objectType": "role",
1871+
"objectId": "developer",
1872+
"relation": "member",
1873+
"subject": {
1874+
"objectType": "user",
1875+
"objectId": "richard"
1876+
}
1877+
}
1878+
}
1879+
},
1880+
{
1881+
"name": "selectMembersOfTypeUserForPermissionViewDocs",
1882+
"request": {
1883+
"method": "GET",
1884+
"url": "/v2/query?q=select%20member%20of%20type%20user%20for%20permission:view-docs"
1885+
},
1886+
"expectedResponse": {
1887+
"statusCode": 200,
1888+
"body": {
1889+
"results": [
1890+
{
1891+
"objectType": "user",
1892+
"objectId": "richard",
1893+
"warrant": {
1894+
"objectType": "role",
1895+
"objectId": "developer",
1896+
"relation": "member",
1897+
"subject": {
1898+
"objectType": "user",
1899+
"objectId": "richard"
1900+
}
1901+
},
1902+
"isImplicit": true
1903+
}
1904+
]
1905+
}
1906+
}
1907+
},
1908+
{
1909+
"name": "selectMembersOfAnyTypeForPermissionViewDocs",
1910+
"request": {
1911+
"method": "GET",
1912+
"url": "/v2/query?q=select%20member%20of%20type%20%2A%20for%20permission:view-docs"
1913+
},
1914+
"expectedResponse": {
1915+
"statusCode": 200,
1916+
"body": {
1917+
"results": [
1918+
{
1919+
"objectType": "role",
1920+
"objectId": "developer",
1921+
"warrant": {
1922+
"objectType": "permission",
1923+
"objectId": "view-docs",
1924+
"relation": "member",
1925+
"subject": {
1926+
"objectType": "role",
1927+
"objectId": "developer"
1928+
}
1929+
},
1930+
"isImplicit": false
1931+
},
1932+
{
1933+
"objectType": "role",
1934+
"objectId": "manager",
1935+
"warrant": {
1936+
"objectType": "role",
1937+
"objectId": "developer",
1938+
"relation": "member",
1939+
"subject": {
1940+
"objectType": "role",
1941+
"objectId": "manager"
1942+
}
1943+
},
1944+
"isImplicit": true
1945+
},
1946+
{
1947+
"objectType": "user",
1948+
"objectId": "richard",
1949+
"warrant": {
1950+
"objectType": "role",
1951+
"objectId": "developer",
1952+
"relation": "member",
1953+
"subject": {
1954+
"objectType": "user",
1955+
"objectId": "richard"
1956+
}
1957+
},
1958+
"isImplicit": true
1959+
}
1960+
]
1961+
}
1962+
}
1963+
},
1964+
{
1965+
"name": "deleteUserRichard",
1966+
"request": {
1967+
"method": "DELETE",
1968+
"url": "/v2/objects/user/richard"
1969+
},
1970+
"expectedResponse": {
1971+
"statusCode": 200
1972+
}
1973+
},
1974+
{
1975+
"name": "deleteRoleManager",
1976+
"request": {
1977+
"method": "DELETE",
1978+
"url": "/v2/objects/role/manager"
1979+
},
1980+
"expectedResponse": {
1981+
"statusCode": 200
1982+
}
1983+
},
1984+
{
1985+
"name": "deleteRoleDeveloper",
1986+
"request": {
1987+
"method": "DELETE",
1988+
"url": "/v2/objects/role/developer"
1989+
},
1990+
"expectedResponse": {
1991+
"statusCode": 200
1992+
}
1993+
},
1994+
{
1995+
"name": "deletePermissionViewDocs",
1996+
"request": {
1997+
"method": "DELETE",
1998+
"url": "/v2/objects/permission/view-docs"
1999+
},
2000+
"expectedResponse": {
2001+
"statusCode": 200
2002+
}
17952003
}
17962004
]
17972005
}

0 commit comments

Comments
 (0)