Commit a882d8fe authored by linj's avatar linj

add js creator privilege

parent 37db92bc
package executor
import (
dbm "github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types"
ptypes "github.com/33cn/plugin/plugin/dapp/js/types"
)
func getManageKey(key string, db dbm.KV) ([]byte, error) {
manageKey := types.ManageKey(key)
return db.Get([]byte(manageKey))
}
func checkPriv(addr, key string, db dbm.KV) error {
value, err := getManageKey(key, db)
if err != nil {
return err
}
if value == nil {
return ptypes.ErrJsCreator
}
var item types.ConfigItem
err = types.Decode(value, &item)
if err != nil {
return err
}
for _, op := range item.GetArr().Value {
if op == addr {
return nil
}
}
return ptypes.ErrJsCreator
}
...@@ -8,13 +8,18 @@ import ( ...@@ -8,13 +8,18 @@ import (
) )
func (c *js) Exec_Create(payload *jsproto.Create, tx *types.Transaction, index int) (*types.Receipt, error) { func (c *js) Exec_Create(payload *jsproto.Create, tx *types.Transaction, index int) (*types.Receipt, error) {
err := checkPriv(tx.From(), ptypes.JsCreator, c.GetStateDB())
if err != nil {
return nil, err
}
execer := types.ExecName("user." + ptypes.JsX + "." + payload.Name) execer := types.ExecName("user." + ptypes.JsX + "." + payload.Name)
if string(tx.Execer) != ptypes.JsX { if string(tx.Execer) != ptypes.JsX {
return nil, types.ErrExecNameNotMatch return nil, types.ErrExecNameNotMatch
} }
c.prefix = calcStatePrefix([]byte(execer)) c.prefix = calcStatePrefix([]byte(execer))
kvc := dapp.NewKVCreator(c.GetStateDB(), c.prefix, nil) kvc := dapp.NewKVCreator(c.GetStateDB(), c.prefix, nil)
_, err := kvc.GetNoPrefix(calcCodeKey(payload.Name)) _, err = kvc.GetNoPrefix(calcCodeKey(payload.Name))
if err != nil && err != types.ErrNotFound { if err != nil && err != types.ErrNotFound {
return nil, err return nil, err
} }
......
...@@ -19,6 +19,9 @@ const ( ...@@ -19,6 +19,9 @@ const (
TyLogJs = 10000 TyLogJs = 10000
) )
// JsCreator 配置项 创建js合约的管理员
const JsCreator = "js-creator"
var ( var (
typeMap = map[string]int32{ typeMap = map[string]int32{
"Create": jsActionCreate, "Create": jsActionCreate,
...@@ -47,6 +50,8 @@ var ( ...@@ -47,6 +50,8 @@ var (
ErrSymbolName = errors.New("chain33.js: ErrSymbolName") ErrSymbolName = errors.New("chain33.js: ErrSymbolName")
ErrExecerName = errors.New("chain33.js: ErrExecerName") ErrExecerName = errors.New("chain33.js: ErrExecerName")
ErrDBType = errors.New("chain33.js: ErrDBType") ErrDBType = errors.New("chain33.js: ErrDBType")
// ErrJsCreator
ErrJsCreator = errors.New("ErrJsCreator")
) )
func init() { func init() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment