// // RPC // void AddAccessHeaders(HttpRequestMessage req, WebContext wc) { if (Clustered) { var cfg = Framework.Config; // req.Headers.TryAddWithoutValidation("X-Caller-Sign", Framework.sign); // req.Headers.TryAddWithoutValidation("X-Caller-Name", cfg.name); // req.Headers.TryAddWithoutValidation("X-Caller-Shard", cfg.shard); } var auth = wc?.Header("Authorization"); if (auth != null) { req.Headers.TryAddWithoutValidation("Authorization", auth); } }
internal override async Task ExecuteAsync(WebContext wc) { // do access check // if (_roles != null) { var prin = wc.Principal; if (prin == null) { throw new WebException { Code = 401 }; // Unauthorized } for (int i = 0; i < _roles.Length; i++) { if (prin.IsRole(_roles[i])) { goto Okay; } } throw new WebException { Code = 403 }; // Forbidden } Okay: if (IsAsync) { await _doAsync(wc); } else { _do(wc); } }
protected internal abstract Task HandleAsync(string rsc, WebContext wc);
/// <summary> /// /// </summary> internal abstract Task ExecuteAsync(WebContext wc);