github.com/infraboard/keyauth@v0.8.1/apps/role/http/role.go (about)

     1  package http
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"github.com/infraboard/mcube/http/context"
     8  	"github.com/infraboard/mcube/http/request"
     9  	"github.com/infraboard/mcube/http/response"
    10  
    11  	"github.com/infraboard/keyauth/apps/role"
    12  	"github.com/infraboard/keyauth/apps/token"
    13  	"github.com/infraboard/keyauth/apps/user/types"
    14  )
    15  
    16  // CreateApplication 创建自定义角色
    17  func (h *handler) CreateRole(w http.ResponseWriter, r *http.Request) {
    18  	ctx := context.GetContext(r)
    19  	tk := ctx.AuthInfo.(*token.Token)
    20  
    21  	req := role.NewCreateRoleRequest()
    22  	req.CreateBy = tk.Account
    23  	req.Domain = tk.Domain
    24  	if err := request.GetDataFromRequest(r, req); err != nil {
    25  		response.Failed(w, err)
    26  		return
    27  	}
    28  
    29  	if !tk.UserType.IsIn(types.UserType_SUPPER) && !req.IsCumstomType() {
    30  		response.Failed(w, fmt.Errorf("only supper account can create global and build role"))
    31  		return
    32  	}
    33  
    34  	d, err := h.service.CreateRole(
    35  		r.Context(),
    36  		req,
    37  	)
    38  	if err != nil {
    39  		response.Failed(w, err)
    40  		return
    41  	}
    42  
    43  	response.Success(w, d)
    44  }
    45  
    46  func (h *handler) QueryRole(w http.ResponseWriter, r *http.Request) {
    47  	ctx := context.GetContext(r)
    48  	tk := ctx.AuthInfo.(*token.Token)
    49  
    50  	req := role.NewQueryRoleRequestFromHTTP(r)
    51  	req.Domain = tk.Domain
    52  
    53  	apps, err := h.service.QueryRole(
    54  		r.Context(),
    55  		req,
    56  	)
    57  	if err != nil {
    58  		response.Failed(w, err)
    59  		return
    60  	}
    61  
    62  	response.Success(w, apps)
    63  }
    64  
    65  func (h *handler) DescribeRole(w http.ResponseWriter, r *http.Request) {
    66  
    67  	rctx := context.GetContext(r)
    68  	pid := rctx.PS.ByName("id")
    69  	qs := r.URL.Query()
    70  
    71  	req := role.NewDescribeRoleRequestWithID(pid)
    72  	req.WithPermissions = qs.Get("with_permissions") == "true"
    73  
    74  	ins, err := h.service.DescribeRole(
    75  		r.Context(),
    76  		req,
    77  	)
    78  	if err != nil {
    79  		response.Failed(w, err)
    80  		return
    81  	}
    82  
    83  	response.Success(w, ins)
    84  }
    85  
    86  func (h *handler) DeleteRole(w http.ResponseWriter, r *http.Request) {
    87  	rctx := context.GetContext(r)
    88  	req := role.NewDeleteRoleWithID(rctx.PS.ByName("id"))
    89  
    90  	_, err := h.service.DeleteRole(
    91  		r.Context(),
    92  		req,
    93  	)
    94  	if err != nil {
    95  		response.Failed(w, err)
    96  		return
    97  	}
    98  
    99  	response.Success(w, "delete ok")
   100  }
   101  
   102  // ListRolePermission 创建自定义角色
   103  func (h *handler) ListRolePermission(w http.ResponseWriter, r *http.Request) {
   104  	req := role.NewQueryPermissionRequestFromHTTP(r)
   105  	rctx := context.GetContext(r)
   106  	req.RoleId = rctx.PS.ByName("id")
   107  
   108  	d, err := h.service.QueryPermission(
   109  		r.Context(),
   110  		req,
   111  	)
   112  	if err != nil {
   113  		response.Failed(w, err)
   114  		return
   115  	}
   116  
   117  	response.Success(w, d)
   118  }
   119  
   120  // CreateApplication 创建自定义角色
   121  func (h *handler) AddPermissionToRole(w http.ResponseWriter, r *http.Request) {
   122  	ctx := context.GetContext(r)
   123  	tk := ctx.AuthInfo.(*token.Token)
   124  	req := role.NewAddPermissionToRoleRequest()
   125  	req.RoleId = ctx.PS.ByName("id")
   126  	req.CreateBy = tk.Account
   127  
   128  	if err := request.GetDataFromRequest(r, req); err != nil {
   129  		response.Failed(w, err)
   130  		return
   131  	}
   132  
   133  	d, err := h.service.AddPermissionToRole(
   134  		r.Context(),
   135  		req,
   136  	)
   137  	if err != nil {
   138  		response.Failed(w, err)
   139  		return
   140  	}
   141  
   142  	response.Success(w, d)
   143  }
   144  
   145  // CreateApplication 创建自定义角色
   146  func (h *handler) RemovePermissionFromRole(w http.ResponseWriter, r *http.Request) {
   147  	rctx := context.GetContext(r)
   148  	req := role.NewRemovePermissionFromRoleRequest()
   149  	req.RoleId = rctx.PS.ByName("id")
   150  
   151  	if err := request.GetDataFromRequest(r, req); err != nil {
   152  		response.Failed(w, err)
   153  		return
   154  	}
   155  
   156  	d, err := h.service.RemovePermissionFromRole(
   157  		r.Context(),
   158  		req,
   159  	)
   160  	if err != nil {
   161  		response.Failed(w, err)
   162  		return
   163  	}
   164  
   165  	response.Success(w, d)
   166  }
   167  
   168  func (h *handler) UpdatePermission(w http.ResponseWriter, r *http.Request) {
   169  	rctx := context.GetContext(r)
   170  
   171  	// 查找出原来的domain
   172  	req := role.NewUpdatePermissionRequest()
   173  	if err := request.GetDataFromRequest(r, req); err != nil {
   174  		response.Failed(w, err)
   175  		return
   176  	}
   177  	req.Id = rctx.PS.ByName("id")
   178  
   179  	ins, err := h.service.UpdatePermission(
   180  		r.Context(),
   181  		req,
   182  	)
   183  	if err != nil {
   184  		response.Failed(w, err)
   185  		return
   186  	}
   187  
   188  	response.Success(w, ins)
   189  }