Koosa
1.0.0
基於角色的訪問控制管理的聲明性快速框架

| 代碼 | 在行動中 |
|---|---|
|
Role或擴展其擴展的原始角色的原始角色。請注意,您可以使用ProtoCl繼承來建模角色繼承結構。 protocol GroupMember : Role {
var groupNumber : Int { set get }
}
protocol GroupAdmin : GroupMember { }Action的類/strcut。 struct BrowseGroup : Action {
let group : Group
init ( ) { // required default initializer
group = Group ( groupNumber : - 1 , isPublicGroup : false ) // default froup
}
init ( group : Group ) {
self . group = group
}
} class GroupAdminUser : User , GroupAdmin {
var groupNumber : Int
init ( name : String , age : Int , groupNumber : Int ) {
self . groupNumber = groupNumber
super . init ( name : name , age : age )
}
override required init ( ) {
self . groupNumber = - 1
super . init ( )
}
} GroupMemberUser . shouldBeAbleTo ( BrowseGroup . action ) . when {
guard let groupMember = $0 as? GroupMember ,
let browseAction = $1 as? BrowseGroup else { return false }
return groupMember . groupNumber == browseAction . group . groupNumber
}
GroupAdminUser . shouldBeAbleTo ( DeleteGroup . action ) . when {
guard let groupAdmin = $0 as? GroupAdminUser ,
let deleteAction = $1 as? DeleteGroup else {
return false
}
return groupAdmin . groupNumber == deleteAction . group . groupNumber
}
_ = SuperAdminUser . shouldBeAbleTo ( BrowseGroup . action ) let member1 = GroupMemberUser ( name : " member1 " , age : 18 , groupNumber : 1 )
let admin2 = GroupAdminUser ( name : " admin2 " , age : 22 , groupNumber : 2 )
let group1 = Group ( groupNumber : 1 , isPublicGroup : false )
let group2 = Group ( groupNumber : 2 , isPublicGroup : false )
member1 . can ( BrowseGroup ( group : group1 ) // true
member1 . can ( BrowseGroup ( group : group2 ) // false
admin2 . can ( BrowseGroup ( group : group1 ) // true: GroupAdmin inherits BrowseGroup permission from GroupMember
admin2 . can ( DeleteGroup ( group : group2 ) // true
admin2 . can ( DeleteGroup ( group : group1 ) // false可以使用Cocoapods安裝錦鯉
use_frameworks !
pod ' Koosa ' 麻省理工學院