class Acl

权限控制类

对方法注释 @noacl 则不检查该方法的权限 对方法注释 @acljump web/User/add 则将当前方法的权限检查跳转为检查 web/User/add方法的权限 加到normal.php配置中 //权限控制配置 'administratorid'=>'1', //超管理员id

建库语句

CREATE TABLE pr_admin_app ( id smallint(6) unsigned NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL DEFAULT '' COMMENT '应用名', PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

CREATE TABLE pr_admin_access ( id int(11) NOT NULL AUTO_INCREMENT COMMENT '权限ID', userid int(11) unsigned NOT NULL DEFAULT '0' COMMENT '所属用户权限ID', groupid int(11) unsigned NOT NULL DEFAULT '0' COMMENT '所属群组权限ID', menuid int(11) NOT NULL DEFAULT '0' COMMENT '权限模块ID', PRIMARY KEY (id), KEY idx_userid (userid), KEY idx_groupid (groupid) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户或者用户组权限记录';

CREATE TABLE pr_admin_groups ( id smallint(3) unsigned NOT NULL AUTO_INCREMENT, name varchar(150) NOT NULL DEFAULT '' COMMENT '用户组名', status tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '1正常,0删除', remark text NOT NULL COMMENT '备注', PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

CREATE TABLE pr_admin_menus ( id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id', pid int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父模块ID编号 0则为顶级模块', title varchar(64) NOT NULL DEFAULT '' COMMENT '标题', url varchar(64) NOT NULL DEFAULT '' COMMENT 'url路径', params varchar(64) NOT NULL DEFAULT '' COMMENT 'url参数', isshow tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否显示', sort smallint(3) unsigned NOT NULL DEFAULT '0' COMMENT '排序倒序', app smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '菜单所属app,对应app表中的主键', PRIMARY KEY (id), KEY idex_pid (pid), KEY idex_order (sort), KEY idx_action (url), KEY idx_app (app) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='权限模块信息表';

CREATE TABLE pr_admin_users ( id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id', groupid varchar(255) NOT NULL DEFAULT '0' COMMENT '用户组id', username varchar(40) NOT NULL DEFAULT '' COMMENT '用户名', nickname varchar(50) NOT NULL DEFAULT '' COMMENT '昵称', password char(32) NOT NULL DEFAULT '' COMMENT '密码', lastlogin int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后登录时间', ctime int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', stime int(10) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间', status tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '1正常,0删除', remark text NOT NULL, from_type tinyint(3) unsigned DEFAULT '1' COMMENT '用户类型。1为系统用户。', PRIMARY KEY (id), UNIQUE KEY username (username) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

Properties

static array $aclNames 有权限的时候保存权限的显示名称用于记录log
static null $authUser 当前登录的用户信息

Methods

static 
setMultiGroupDeper(string $deper = '|')

设置单个用户归属多个用户组时多个id在mysql中的分隔符

static string
getMultiGroupDeper()

获取单个用户归属多个用户组时多个id在mysql中的分隔符

static 
setOtherAclParams(string $otherAclParams = '')

设置权限除了检查url之外的params参数。如当前请求的url为web/Index/index 这边传参?id=1则检查权限的时候是检查url为web/Index/index并且params字段为?id=1的菜单

static 
setEncryptKey(string $key)

设置加密用的混淆key Cookie::set本身有一重加密 这里再加一重

static 
setTableName(string|array $type = 'access', string $tableName = 'access')

自定义表名

static mixed
getTableName(string $type = 'access')

获取表名

static 
setLoginStatus(int $uid, bool $sso = true, int $cookieExpire = 0, int $notOperationAutoLogin = 3600, string $cookiePath = '', string $cookieDomain = '')

保存当前登录用户的信息

static array
getLoginInfo()

获取当前登录用户的信息

static bool
checkAcl(object|string $controller)

检查对应的权限

static array
getMenus(bool $format = true, string $columns = '')

获取有权限的菜单列表

static 
logout()

登出

static bool
isSuperUser()

判断当前登录用户是否为超级管理员

Details

at line 148
static setMultiGroupDeper(string $deper = '|')

设置单个用户归属多个用户组时多个id在mysql中的分隔符

Parameters

string $deper 分隔符

at line 158
static string getMultiGroupDeper()

获取单个用户归属多个用户组时多个id在mysql中的分隔符

Return Value

string

at line 168
static setOtherAclParams(string $otherAclParams = '')

设置权限除了检查url之外的params参数。如当前请求的url为web/Index/index 这边传参?id=1则检查权限的时候是检查url为web/Index/index并且params字段为?id=1的菜单

Parameters

string $otherAclParams

at line 178
static setEncryptKey(string $key)

设置加密用的混淆key Cookie::set本身有一重加密 这里再加一重

Parameters

string $key

at line 189
static setTableName(string|array $type = 'access', string $tableName = 'access')

自定义表名

Parameters

string|array $type
string $tableName

at line 204
static mixed getTableName(string $type = 'access')

获取表名

Parameters

string $type

Return Value

mixed

at line 223
static setLoginStatus(int $uid, bool $sso = true, int $cookieExpire = 0, int $notOperationAutoLogin = 3600, string $cookiePath = '', string $cookieDomain = '')

保存当前登录用户的信息

Parameters

int $uid 用户id
bool $sso 是否为单点登录,即踢除其它登录用户
int $cookieExpire 登录的过期时间,为0则默认保持到浏览器关闭,> 0的值为登录有效期的秒数。默认为0
int $notOperationAutoLogin 当$cookieExpire设置为0时,这个值为用户多久不操作则自动退出。默认为1个小时
string $cookiePath path
string $cookieDomain domain

at line 248
static array getLoginInfo()

获取当前登录用户的信息

Return Value

array

at line 313
static bool checkAcl(object|string $controller)

检查对应的权限

Parameters

object|string $controller 传入控制器实例对象,用来判断当前访问的方法是不是要跳过权限检查。 如当前访问的方法为web/User/list则传入new \web\Controller\User()获得的实例。最常用的是在基础控制器的init方法或构造方法里传入$this。 传入字符串如web/User/list时会自动 new \web\Controller\User()获取实例用于判断

Return Value

bool

Exceptions

Exception

at line 413
static array getMenus(bool $format = true, string $columns = '')

获取有权限的菜单列表

Parameters

bool $format 是否格式化返回
string $columns 要额外获取的字段

Return Value

array

at line 443
static logout()

登出

at line 455
static bool isSuperUser()

判断当前登录用户是否为超级管理员

Return Value

bool