@@ -19,6 +19,7 @@ import (
1919 "errors"
2020 "io/ioutil"
2121 "strings"
22+ "sync"
2223
2324 pb "github.com/casbin/casbin-server/proto"
2425 "github.com/casbin/casbin/v2"
@@ -30,6 +31,8 @@ import (
3031type Server struct {
3132 enforcerMap map [int ]* casbin.Enforcer
3233 adapterMap map [int ]persist.Adapter
34+ muE sync.RWMutex
35+ muA sync.RWMutex
3336}
3437
3538func NewServer () * Server {
@@ -42,28 +45,40 @@ func NewServer() *Server {
4245}
4346
4447func (s * Server ) getEnforcer (handle int ) (* casbin.Enforcer , error ) {
45- if _ , ok := s .enforcerMap [handle ]; ok {
46- return s .enforcerMap [handle ], nil
48+ s .muE .RLock ()
49+ defer s .muE .RUnlock ()
50+
51+ if e , ok := s .enforcerMap [handle ]; ok {
52+ return e , nil
4753 } else {
4854 return nil , errors .New ("enforcer not found" )
4955 }
5056}
5157
5258func (s * Server ) getAdapter (handle int ) (persist.Adapter , error ) {
53- if _ , ok := s .adapterMap [handle ]; ok {
54- return s .adapterMap [handle ], nil
59+ s .muA .RLock ()
60+ defer s .muA .RUnlock ()
61+
62+ if a , ok := s .adapterMap [handle ]; ok {
63+ return a , nil
5564 } else {
5665 return nil , errors .New ("adapter not found" )
5766 }
5867}
5968
6069func (s * Server ) addEnforcer (e * casbin.Enforcer ) int {
70+ s .muE .Lock ()
71+ defer s .muE .Unlock ()
72+
6173 cnt := len (s .enforcerMap )
6274 s .enforcerMap [cnt ] = e
6375 return cnt
6476}
6577
6678func (s * Server ) addAdapter (a persist.Adapter ) int {
79+ s .muA .Lock ()
80+ defer s .muA .Unlock ()
81+
6782 cnt := len (s .adapterMap )
6883 s .adapterMap [cnt ] = a
6984 return cnt
0 commit comments