62 lines
1.1 KiB
Go
62 lines
1.1 KiB
Go
|
package rbac
|
||
|
|
||
|
// Rule 最多六個參數,例如
|
||
|
//
|
||
|
// p, admin, data1, read
|
||
|
// PolicyType:p
|
||
|
// Field0:admin
|
||
|
// Field01:data1
|
||
|
// Field02:read
|
||
|
type Rule struct {
|
||
|
PolicyType string // p or g
|
||
|
Field0 string
|
||
|
Field1 string
|
||
|
Field2 string
|
||
|
Field3 string
|
||
|
Field4 string
|
||
|
Field5 string
|
||
|
}
|
||
|
|
||
|
// ToString 轉換成這樣 []string{"p", "admin", "data1", "read"} 讓 casbin 看得懂
|
||
|
func (rule Rule) ToString() []string {
|
||
|
fields := []string{
|
||
|
rule.PolicyType, rule.Field0, rule.Field1,
|
||
|
rule.Field2, rule.Field3, rule.Field4, rule.Field5,
|
||
|
}
|
||
|
// 移除空字串,提高效能
|
||
|
var result []string
|
||
|
for _, field := range fields {
|
||
|
if field != "" {
|
||
|
result = append(result, field)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
func StringToPolicy(policyType string, rule []string) Rule {
|
||
|
line := Rule{}
|
||
|
|
||
|
line.PolicyType = policyType
|
||
|
if len(rule) > 0 {
|
||
|
line.Field0 = rule[0]
|
||
|
}
|
||
|
if len(rule) > 1 {
|
||
|
line.Field1 = rule[1]
|
||
|
}
|
||
|
if len(rule) > 2 {
|
||
|
line.Field2 = rule[2]
|
||
|
}
|
||
|
if len(rule) > 3 {
|
||
|
line.Field3 = rule[3]
|
||
|
}
|
||
|
if len(rule) > 4 {
|
||
|
line.Field4 = rule[4]
|
||
|
}
|
||
|
if len(rule) > 5 {
|
||
|
line.Field5 = rule[5]
|
||
|
}
|
||
|
|
||
|
return line
|
||
|
}
|