?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
  
<?php
 
 
namespace frontend\controllers;
 
use frontend\models\Form;
use frontend\models\Rbac;
use yii\web\Controller;
 
class RbacController extends Controller
{
 
    //首页
    public function actionIndex()
    {
        return $this->render("index");
    }
 
    //创建权限
    public function actionAdd_rule()
    {
        $model = new Form();
        return $this->render("add_rule", ['model' => $model]);
    }
 
    //权限添加处理
    public function actionRule_add()
    {
        $data = \Yii::$app->request->post("Form");
        $item = $data['username'];
 
        /*操作核心代码开始*/
        $auth = \Yii::$app->authManager;
        //权限名: action
        $createPost = $auth->createPermission($item);
        //添加描述
        $createPost->description = '创建了 ' . $item . ' 许可';
        $auth->add($createPost);
        /*操作核心代码开始*/
 
        echo "<script>alert('创建成功');location.href='?r=rbac/index'</script>";
    }
 
    //添加角色
    public function actionRoles()
    {
        $model = new Form();
        return $this->render("roles", ['model' => $model]);
    }
 
    //添加角色处理
    public function actionRoles_dd()
    {
        $data = \Yii::$app->request->post("Form");
        $item = $data['username'];
 
        /*操作核心代码开始*/
        $auth = \Yii::$app->authManager;
        //角色名
        $role = $auth->createRole($item);
        //操作描述
        $role->description = '创建了 ' . $item . ' 角色';
        $auth->add($role);
        /*操作核心代码结束*/
 
        echo "<script>alert('创建成功');location.href='?r=rbac/index'</script>";
    }
 
    //给角色分配许可
    public function actionAuth_item()
    {
        /*操作核心代码开始*/
        $model = new Form();
        $mod = new Rbac();
        $data = $mod->auth_item();
        /*操作核心代码结束*/
 
        return $this->render("auth_item", ['model' => $model, 'data' => $data]);
    }
 
    //给角色分配许可处理
    public function actionAuth_item_dd()
    {
        $data = \Yii::$app->request->post("Form");
        $role = '';
        $auth = '';
        $reg = array();
        foreach ($data['auth'] as $v) {
            $auth = $v;
            foreach ($data['role'] as $key => $val) {
                $role = $val;
                $reg[$role][] = $auth;
            }
        }
        //循环入库,方法太喽.懒得改了,记一下入库代码就行
        foreach ($reg as $k => $v) {
            foreach ($v as $val) {
 
                /*操作核心代码开始*/
                $auth = \Yii::$app->authManager;
                //角色名
                $parent = $auth->createRole($k);
                //权限名
                $child = $auth->createPermission($val);
                $auth->addChild($parent, $child);
                /*操作核心代码结束*/
 
            }
        }
        echo "<script>alert('给角色分配许可');location.href='?r=rbac/index'</script>";
    }
 
    //给用户分配角色
    public function actionChild()
    {
        //查询所有角色
        $role = (new \yii\db\Query())
            ->select(['name'])
            ->from("auth_item")
            ->where(['type' => 1])->all();
 
        $role_new = array();
        foreach ($role as $v) {
            $role_new[$v['name']] = $v['name'];
        }
        //查询所有用户
        $user = (new \yii\db\Query())
            ->select(['username''id'])
            ->from("user")
            ->all();
        $user_new = array();
        foreach ($user as $v) {
            $user_new[$v['id']] = $v['username'];
        }
 
        $model = new Form();
        return $this->render("child", ['model' => $model, 'role' => $role_new, 'user' => $user_new]);
    }
 
    //给用户分配角色处理
    public function actionChild_dd()
    {
        $data = \Yii::$app->request->post('Form');
        $role = '';
        $reg = array();
        foreach ($data['role'] as $v) {
            foreach ($data['auth'] as $key => $val) {
                $role = $val;
                $reg[$role][] = $v;
            }
        }
 
        foreach ($reg as $k => $v) {
            foreach ($v as $val) {
 
                /*操作核心代码开始*/
                $auth = \Yii::$app->authManager;
                $reader = $auth->createRole($k);//$k是角色
                $auth->assign($reader, $val);//$val为用户id
                /*操作核心代码开始*/
 
            }
        }
        echo "<script>alert('用户分配角色成功');location.href='?r=rbac/index'</script>";
 
    }
 
    //验证用户是否有权限
    /* 操作核心代码开始,
     * 下面验证方法加入需要验证的控制器里面,或者自己写一个控制器,然后,其它控制器来继承
     * 当该控制器内的方法被执行的时候,会自动验证用户是否有权限操作
     * */
    public function beforeAction($action)
    {
        $action = \Yii::$app->controller->action->id;
        if (\Yii::$app->user->can($action)) {
            return true;
        else {
            throw new \yii\web\UnauthorizedHttpException('对不起,您现在还没获此操作的权限');
        }
    }
    /*操作核心代码开始*/
 
 
}
 
  
---------------------------------------------------------------------------------------------
唯有志存高远,方能风行天下。

道之所存,虽千万人吾往矣! 情之所钟,虽千万里吾念矣~

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。