Add documentation
This commit is contained in:
44
README.md
44
README.md
@@ -1,8 +1,48 @@
|
|||||||
# access-control
|
# Access Kontrol
|
||||||
Helpers to create Access Control
|
Helpers to create a simple Access Control in kotlin
|
||||||
|
|
||||||
[](https://github.com/flecomte/access-control/actions/workflows/tests.yml)
|
[](https://github.com/flecomte/access-control/actions/workflows/tests.yml)
|
||||||
[](https://sonarcloud.io/dashboard?id=flecomte_access-control)
|
[](https://sonarcloud.io/dashboard?id=flecomte_access-control)
|
||||||
|
|
||||||
[](https://sonarcloud.io/dashboard?id=flecomte_access-control)
|
[](https://sonarcloud.io/dashboard?id=flecomte_access-control)
|
||||||
[](https://sonarcloud.io/dashboard?id=flecomte_access-control)
|
[](https://sonarcloud.io/dashboard?id=flecomte_access-control)
|
||||||
|
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
Define AC
|
||||||
|
```kotlin
|
||||||
|
class AccessControlSample : AccessControl() {
|
||||||
|
/** The user can view the object if it is connected and if it is the creator */
|
||||||
|
fun canView(myObject: MyObject, user: User?): AccessResponse {
|
||||||
|
return if (user != null && myObject.createdBy == user) {
|
||||||
|
granted(message = "OK") // the message if optional on granted
|
||||||
|
} else {
|
||||||
|
denied(message = "You must be the creator", code = "creator.ko")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun canView(myObjects: List<MyObject>, user: User?): AccessResponses {
|
||||||
|
return canAll(myObjects) { canView(it, user) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Usage
|
||||||
|
```kotlin
|
||||||
|
AccessControlSample().canView(MyObject(), User()).let { response ->
|
||||||
|
response.message // "OK"
|
||||||
|
response.decision == AccessDecision.GRANTED // true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
AccessControlSample().canView(MyObject(), User()).assert() // throw exception if no access
|
||||||
|
} catch (e: AccessDeniedException) {
|
||||||
|
e.getFirstMessage() // the access denied message: "You must be the creator"
|
||||||
|
e.first.code // the access denied code: "creator.ko"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AccessControlSample().canView(MyObject(), User()).toBoolean() // return true if access is granted
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user