yii2 高级版本的权限控制RBAC(认证与授权的使用)修改篇

common/main.php的components下
在这里插入图片描述

'authManager' => [
            'class' => 'yii\rbac\DbManager',
            'itemTable' => 'auth_item',
            'assignmentTable' => 'auth_assignment',
            'itemChildTable' => 'auth_item_child',
        ],

yii migrate --migrationPath=@yii/rbac/migrations/

生成这样
在这里插入图片描述

user表:

-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: 2022-01-28 03:49:51
-- 服务器版本: 10.1.13-MariaDB
-- PHP Version: 5.6.21

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `smister`
--

-- --------------------------------------------------------

--
-- 表的结构 `user`
--

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `auth_key` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `password_hash` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password_reset_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `status` smallint(6) NOT NULL DEFAULT '10',
  `created_at` int(11) NOT NULL,
  `updated_at` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- 转存表中的数据 `user`
--

INSERT INTO `user` (`id`, `username`, `auth_key`, `password_hash`, `password_reset_token`, `email`, `status`, `created_at`, `updated_at`) VALUES
(1, 'cyg', '', '$2y$13$NHFd.3BWFT5hSiq3uH1Ph.tB7LclapDx.dDRexGgk7eb5zynMkgPe', NULL, '', 10, 0, 0);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `user`
--
ALTER TABLE `user`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `username` (`username`),
  ADD UNIQUE KEY `email` (`email`),
  ADD UNIQUE KEY `password_reset_token` (`password_reset_token`);

--
-- 在导出的表使用AUTO_INCREMENT
--

--
-- 使用表AUTO_INCREMENT `user`
--
ALTER TABLE `user`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

切记:一个注释一个注释的试.

整个源代码:

<?php
namespace frontend\controllers;
use Yii;
class IndexController extends \yii\web\Controller
{
	
	public function actionSite()
	{
		
		//创建总经理这个角色
		/*$role=Yii::$app->authManager->createRole("总经理");
		Yii::$app->authManager->add($role);
		var_dump($role);*/
		//创建权限
		/*$permission=Yii::$app->authManager->createPermission('index/index');
			//注册进权限中
		Yii::$app->authManager->add($permission);*/
		//获取总经理这个角色+获取site/index这个权限
		/*$role=Yii::$app->authManager->getRole("总经理");
		$permission=Yii::$app->authManager->getPermission("index/index");
		//把index/index这个链接的权限赋值给总经理这个角色
		Yii::$app->authManager->addChild($role,$permission);*/
		//获取总经理这个角色,然后
		/*$role = Yii::$app->authManager->getRole("总经理");
		Yii::$app->authManager->assign($role,1);
		*/
		
/*$user=\common\models\User::findOne(['id'=>1]);
Yii::$app->user->login($user);*/
//var_dump(Yii::$app->user->id);
//var_dump(Yii::$app->user->can('index/index'));
}}

第一步:
//创建总经理这个角色,并且注册进权限表中

$role=Yii::$app->authManager->createRole("总经理");
		Yii::$app->authManager->add($role);
		var_dump($role);

在这里插入图片描述第二步:
//创建权限

$permission=Yii::$app->authManager->createPermission('index/index');

//注册进权限中

Yii::$app->authManager->add($permission);

在这里插入图片描述
第三步:
获取总经理角色
获取index/index权限
把权限赋值给角色

$role=Yii::$app->authManager->getRole("总经理");
$permission=Yii::$app->authManager->getPermission("index/index");
Yii::$app->authManager->addChild($role,$permission);

在这里插入图片描述
第四步:
获取总经理角色。赋值给同一个数据库里面的user表里面的id字段.意思是这个user表的id字段拥有这个权限,id为1的字段相当于用户!

$role = Yii::$app->authManager->getRole("总经理");
		Yii::$app->authManager->assign($role,1);

第五步:
实现登录效果

$user=\common\models\User::findOne(['id'=>1]);
Yii::$app->user->login($user);

第六步:
判断是否已经登录了

var_dump(Yii::$app->user->id);

第七步:
判断user表里面的id是否具备index/index这个权限

var_dump(Yii::$app->user->can('index/index'));

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贵哥的编程之路(热爱分享)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值