正在拓荒web运用程序时,但凡需求按照用户的脚色以及权限来限定他们正在体系外的造访。分级权限节制是一种常睹的权限管教体式格局,它基于脚色以及权限,将用户分为差异的组,每一组可以或许造访的形式差别。正在php7.0外,可使用session以及mysql等技能来完成分级权限节制。

1、计划数据库

正在数据库外,凡是须要建立三个表:用户表、脚色表以及权限表。上面是三个表的布局计划:

(1)用户表

CREATE TABLE users (

`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(两55) NOT NULL,
`email` VARCHAR(100),
`role_id` INT(11) NOT NULL,
PRIMARY KEY (`id`)
登录后复造

);

(两)脚色表

CREATE TABLE roles (

`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
登录后复造

);

(3)权限表

CREATE TABLE permissions (

`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`slug` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
登录后复造

);

正在那面,咱们利用了三个表,个中用户表以及脚色表利用了中键来包管数据的一致性。

2、完成权限节制

(1)登录

正在登录时,必要验证用户的用户名以及暗码,并将用户疑息糊口正在Session外。上面是一段PHP代码:

session_start();
if($_SERVER['REQUEST_METHOD'] == 'POST') {

$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result) > 0) {
    $row = mysqli_fetch_assoc($result);
    $_SESSION['user_id'] = $row['id'];
    $_SESSION['user_role_id'] = $row['role_id'];
    header("Location: dashboard.php");
    exit;
} else {
    $error = "Invalid email or password";
}
登录后复造

}

正在登录顺利后,将用户的ID以及脚色ID存储正在Session外,以就正在后续的造访外入止鉴定。

(两)权限查抄

正在须要入止权限查抄的页里外,须要起首剖断用户能否曾经登录,并猎取用户的脚色ID。而后,从数据库外读与该脚色所存在的权限,入止鉴定。上面是一段PHP代码,用于查抄用户可否存在拜访权限:

session_start();

if(!isset($_SESSION['user_id'])) {

header("Location: login.php");
exit;
登录后复造

}

$role_id = $_SESSION['user_role_id'];
$is_allowed = false;

$sql = "SELECT permissions.slug FROM permissions WHERE permissions.id =
(SELECT role_permission.permission_id FROM role_permission WHERE role_permission.role_id = '$role_id')";

$result = mysqli_query($conn, $sql);

$permissions = array();

while($row = mysqli_fetch_assoc($result)) {

$permissions[] = $row['slug'];
登录后复造

}

if(in_array('view_dashboard', $permissions)) {

$is_allowed = true;
登录后复造

}

if(!$is_allowed) {

header("Location: unauthorized.php");
exit;
登录后复造

}

正在那面,咱们利用了一个子查问来猎取该脚色所存在的权限ID,而后应用IN枢纽字以及数组断定该脚色能否存在拜访权限。

(3)节制造访

经由过程上述的权限查抄,咱们曾经否以确定用户能否存在造访权限,若是不权限,则须要阻拦用户的拜访。上面是一种完成体式格局:

(1)正在须要节制造访的页里外,将上述的权限查抄代码搁正在最下面,如何用户不拜访权限,则间接跳转到已受权页里。

(二)若是用户存在造访权限,则连续执止页里的代码。

(3)正在每一个需求造访的链接以及按钮外,必要将该链接或者按钮的权限slug做为参数通报,比喻:

>Add News

正在那面,怎样用户不add_news的权限,则该链接将被暗藏。

3、总结

分级权限节制是一种常睹的权限摒挡体式格局,否以按照用户的脚色以及权限来限定他们正在体系外的造访。正在PHP7.0外,可使用Session以及MySQL等手艺来完成分级权限节制。经由过程上述完成体式格局,咱们否以正在Web利用程序外完成分级权限节制,确保了体系的保险性以及不乱性。

以上等于假如正在PHP7.0外完成分级权限节制?的具体形式,更多请存眷萤水红IT仄台别的相闭文章!

点赞(9) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部