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,
|
|
}
|
|
// 移除空字串,提高效能
|
|
result := make([]string, 0, len(fields))
|
|
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
|
|
}
|