save
This commit is contained in:
parent
64d4433aaa
commit
5660e16e99
@ -20,7 +20,7 @@ class RuleController extends Crud
|
|||||||
*
|
*
|
||||||
* @var string[]
|
* @var string[]
|
||||||
*/
|
*/
|
||||||
protected $noNeedAuth = ['get', 'auth'];
|
protected $noNeedAuth = ['get', 'permission'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Rule
|
* @var Rule
|
||||||
@ -92,7 +92,7 @@ class RuleController extends Crud
|
|||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function auth(Request $request): Response
|
public function permission(Request $request): Response
|
||||||
{
|
{
|
||||||
$rules = $this->getRules(admin('roles'));
|
$rules = $this->getRules(admin('roles'));
|
||||||
// 超级管理员
|
// 超级管理员
|
||||||
|
@ -783,7 +783,7 @@ EOF
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script src="/app/admin/admin/js/common.js"></script>
|
<script src="/app/admin/admin/js/common.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@ -968,7 +968,7 @@ EOF;
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
@ -1043,7 +1043,7 @@ EOF;
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
layui.use(["form", "popup"], function () {
|
layui.use(["form", "popup"], function () {
|
||||||
|
@ -97,7 +97,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script src="/app/admin/admin/js/common.js"></script>
|
<script src="/app/admin/admin/js/common.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 相关接口
|
// 相关接口
|
||||||
|
@ -87,7 +87,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 相关接口
|
// 相关接口
|
||||||
|
@ -16,6 +16,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -176,7 +176,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 基础设置
|
// 基础设置
|
||||||
|
@ -106,7 +106,7 @@
|
|||||||
</body>
|
</body>
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
layui.use("design");
|
layui.use("design");
|
||||||
</script>
|
</script>
|
||||||
|
@ -63,7 +63,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script src="/app/admin/admin/js/common.js"></script>
|
<script src="/app/admin/admin/js/common.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
const INSERT_API = "/app/admin/dict/insert";
|
const INSERT_API = "/app/admin/dict/insert";
|
||||||
|
@ -92,7 +92,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
const DICT_NAME = layui.url().search.name;
|
const DICT_NAME = layui.url().search.name;
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
<a class="layui-icon layui-icon-username" href="javascript:;"></a>
|
<a class="layui-icon layui-icon-username" href="javascript:;"></a>
|
||||||
<!-- 功 能 菜 单 -->
|
<!-- 功 能 菜 单 -->
|
||||||
<dl class="layui-nav-child">
|
<dl class="layui-nav-child">
|
||||||
<dd><a user-menu-url="/app/admin/account/index" user-menu-id="11" user-menu-title="基本资料">基本资料</a></dd>
|
<dd><a user-menu-url="/app/admin/account/index" user-menu-id="10" user-menu-title="基本资料">基本资料</a></dd>
|
||||||
<dd><a href="javascript:void(0);" class="logout">注销登录</a></dd>
|
<dd><a href="javascript:void(0);" class="logout">注销登录</a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
layui.use(["form", "button", "popup", "layer"], function() {
|
layui.use(["form", "button", "popup", "layer"], function() {
|
||||||
var $ = layui.$, layer = layui.layer, form = layui.form;
|
var $ = layui.$, layer = layui.layer, form = layui.form;
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
const SELECT_API = "/app/admin/plugin/list";
|
const SELECT_API = "/app/admin/plugin/list";
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script src="/app/admin/admin/js/common.js"></script>
|
<script src="/app/admin/admin/js/common.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script src="/app/admin/admin/js/common.js"></script>
|
<script src="/app/admin/admin/js/common.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -87,7 +87,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 接口
|
// 接口
|
||||||
|
@ -86,7 +86,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 相关接口
|
// 相关接口
|
||||||
|
@ -215,7 +215,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
const CREATE_API = "/app/admin/table/create";
|
const CREATE_API = "/app/admin/table/create";
|
||||||
|
@ -73,7 +73,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
const CRUD_API = "/app/admin/table/crud";
|
const CRUD_API = "/app/admin/table/crud";
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script src="/app/admin/admin/js/common.js"></script>
|
<script src="/app/admin/admin/js/common.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
const INSERT_API = "/app/admin/table/insert";
|
const INSERT_API = "/app/admin/table/insert";
|
||||||
|
@ -219,7 +219,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
const MODIFY_API = "/app/admin/table/modify";
|
const MODIFY_API = "/app/admin/table/modify";
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
let PRIMARY_KEY = "id";
|
let PRIMARY_KEY = "id";
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script src="/app/admin/admin/js/common.js"></script>
|
<script src="/app/admin/admin/js/common.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -87,7 +87,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script src="/app/admin/admin/js/common.js"></script>
|
<script src="/app/admin/admin/js/common.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script src="/app/admin/admin/js/common.js"></script>
|
<script src="/app/admin/admin/js/common.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 字段 文件 url
|
// 字段 文件 url
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 相关接口
|
// 相关接口
|
||||||
|
@ -166,7 +166,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script src="/app/admin/admin/js/common.js"></script>
|
<script src="/app/admin/admin/js/common.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 相关接口
|
// 相关接口
|
||||||
|
@ -151,7 +151,7 @@
|
|||||||
|
|
||||||
<script src="/app/admin/component/layui/layui.js"></script>
|
<script src="/app/admin/component/layui/layui.js"></script>
|
||||||
<script src="/app/admin/component/pear/pear.js"></script>
|
<script src="/app/admin/component/pear/pear.js"></script>
|
||||||
<script src="/app/admin/admin/js/auth.js"></script>
|
<script src="/app/admin/admin/js/permission.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 相关接口
|
// 相关接口
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
layui.$(function () {
|
layui.$(function () {
|
||||||
let $ = layui.$;
|
let $ = layui.$;
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/app/admin/rule/auth",
|
url: "/app/admin/rule/permission",
|
||||||
dataType: "json",
|
dataType: "json",
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
let style = '';
|
let style = '';
|
Loading…
Reference in New Issue
Block a user