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 ' 麻省理工学院