Yotakuの開発日記(1)

Jun 13, 2016 pm 12:28 PM
auth insert role

Yotaku の開発ログ (1)

2015-12-18 21:17:46

数日間 ThinkPHP フレームワークを調べていましたが、ロールベースのユーザー アクセス制御が表示されました。

関連するコードは次のとおりです:

データベース

ユーザー テーブル (管理者)

mg_id mg_name mg_pwd mg_time mg_role_id
0 creatint 123 2587413547 1
1 yotaku 123 258744984 4
CREAATE TABLE `sw_manager` (    `mg_id` int(11) NOT NULL AUTO_INCREMENT,    `mg_name` varchar(32) NOT NULL,    `mg_pwd` varchar(32) NOT NULL,     `mg_time` int(10) unsigned NOT NULL COMMENT '时间',    `mg_role_id` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '角色id',    PRIMARY KEY (`mg_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
ログイン後にコピー

権限テーブル

auth_id(权限ID) auth_name(权限名称) auth_pid(父id) auth_c(控制器) auth_a(操作方法) auth_path(全路径) auth_level(权限级别)
100 产品中心 0 '' '' 100 0
101 产品展示 100 ManagerController show 100-101 1
CREATE TABLE `sw_auth` (    `auth_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,    `auth_name` varchar(20) NOT NULL COMMENT '权限名称',    `auth_pid` smallint(6) unsigned NOT NULL COMMENT'父id',    `auth_c` varchar(32) NOT NULL DEFAULT '' COMMENT '控制器',    `auth_a` varchar(32) NOT NULL DEFAULT '' COMMENT '操作方法',    `auth_path` varchar(32) NOT NULL COMMENT '全路径',    `auth_level` tinyint(4) NOT NULL DEFAULT '0' COMMENT '级别',    PRIMARY KEY(`auth_id`)) ENGING-InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
ログイン後にコピー

ロールテーブル

role_id role_name role_auth_ids role_auth_ac
0 站主 1,3,9 操作器-控制器,操作器-控制器,...
1 高级管理员 1,2,3,9,12 操作器-控制器,操作器-控制器,...
CREATE TABLE `sw_role` (    `role_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,    `role_name` varchar(20) NOT NULL COMMENT '角色名称',    `role_auth_ids` varchar(128) NOT NULL DEFAULT '' COMMENT '权限id,1,3,..',    `role_auth_ac` text COMMENT '控制器2-操作3,控制器1-操作6,...',    PRIMARY KEY(`role_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;<br><br>
ログイン後にコピー

 


数据模拟

1.权限数据

  产品中心(产品展示,最新产品,分类管理,子类管理) 高级管理(用户留言,留言簿,产品订购,文件管理) 系统管理(基本设置,样式管理,首页设置,管理员列表)

<span class="zhushi">顶级权限</span>insert into sw_auth values ( 100,'产品中心',0,'','',100,0 );insert into sw_auth values ( 101,'高级管理',0,'','',101,0 );insert into sw_auth values ( 102,'系统管理',0,'','',102,0 );insert into sw_auth values ( 103,'权限管理',0,'','',103,0 );<span class="zhushi">次级权限</span>insert into sw_auth values ( 104,'产品展示',100,'Goods','show','100-104',1 );insert into sw_auth values ( 105,'最新产品',100,'Goods','showlist','100-105',1 );insert into sw_auth values ( 106,'分类管理',100,'Goods','cate','100-106',1 );insert into sw_auth values ( 107,'用户留言',101,'Goods','words','101-107',1 );insert into sw_auth values ( 108,'留言簿',  101,'Goods','wordsbook','101-108',1 );insert into sw_auth values ( 109,'基本设置',102,'Goods','set','102-109',1 );insert into sw_auth values ( 110,'样式管理',102,'Goods','css','102-110',1 );insert into sw_auth values ( 111,'用户列表',103,'Goods','userlist','103-111',1 );insert into sw_auth values ( 112,'角色管理',103,'Goods','role','103-112',1 );insert into sw_auth values ( 113,'权限列表',103,'Goods','auth','103-113',1 );
ログイン後にコピー

2.角色数据

  sw_role 站主 所有权限(103,104,105,106,107,108,109) 管理员 部分权限(104,105,109) 版主 部分权限(103,108)

<span class="zhushi">角色</span>insert into sw_role values (10,'站主','100,101,102,103,104,105,106,107,108,109,110,111,112,113','Goods-show,Goods-showlist,Goods-cate,Goods-words,Goods-wordsbook,Goods-set,Goods-css');insert into sw_role values (11,'管理员','100,102,104,105,109','Goods-showlist,Goods-cate,Goods-css');insert into sw_role values (12,'版主','100,101,103,106,108,113','Goods-show,Goods-set');
ログイン後にコピー

3.流程说明

  Index控制器内 获取用户的角色id,进而获得角色权限 进行判断是否展现数据 Index控制器--->left方法--->left.html模板 Index控制器

//(1)根据用户id获取本身记录信息
        $mg_id = session('admin_id');        
ログイン後にコピー
//D('Manager')实例化了一个Manager的Model对象
        $manager_info = D('Manager')->find($mg_id);        $role_id = $manager_info['mg_role_id'];        
ログイン後にコピー
//(2)根据role_id 获得本身记录信息
        $role_info = D('Role')->find($role_id);        $auth_ids = $role_info['role_auth_ids'];        
ログイン後にコピー
//(3)根据$auth_ids 获得具体权限
        $auth_infoA = D('Auth')->where("auth_level=0 and auth_id in($auth_ids)")->select();
ログイン後にコピー
//父级
        $auth_infoB = D('Auth')->where("auth_level=1 and auth_id in($auth_ids)")->select();
ログイン後にコピー
//子级
        $this->assign('auth_infoA',$auth_infoA);        $this->assign('auth_infoB',$auth_infoB);        
ログイン後にコピー
//传到模板中
        $this->assign('auth_info',$auth_info);        $this->display();
ログイン後にコピー

4.模板 left.html

  {foreach $auth_infoA as $k=>$v}

    

    

      background={$smarty.const.ADMIN_IMG_URL}/menu_bt.jpg >{$v.auth_id})

      href="javascript:void(0);">{$v.auth_name}

    

{$v.auth_id} style="display: none" cellspacing=0 cellpadding=0 width=150 border=0>

      {foreach $auth_infoB as $k2=>$v2}

        {if $v2.auth_pid == $v.auth_id}

          

          

         {/if}

      {/foreach}

      

    

{$smarty.const.ADMIN_IMG_URL}/menu_icon.gif" width=9>{$smarty.const.__MODULE__}/{$v2.auth_c}/{$v2.auth_a}" target=right>{$v2.auth_name}

          

  {/foreach}

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

mysqlの挿入無視、挿入、置換の違いは何ですか mysqlの挿入無視、挿入、置換の違いは何ですか May 29, 2023 pm 04:40 PM

insertignore、insert、replace 命令がすでに存在するかどうかの違い 挿入エラーの例 Insertintonames(name,age)values("Xiao Ming", 23); insertignore は insertignoreintonames(name, age)values("Xiao Ming", 24); replace 置換して挿入 replaceintonames(name,age)values("Xiao Ming", 25); テーブル要件: PrimaryKey、または一意のインデックス結果: テーブル ID は自動的にインクリメントされます。テスト コードはテーブルを作成します。

Java API開発における認証にAuth0を使用する Java API開発における認証にAuth0を使用する Jun 18, 2023 pm 05:30 PM

最新のソフトウェア開発において、ID 認証は非常に重要なセキュリティ対策です。 Auth0 は ID 認証サービスを提供する会社で、開発者が複数の ID 認証方式 (OAuth2、OpenIDConnect など) を迅速に実装し、安全で信頼性の高い認証サービスを提供できるように支援します。この記事では、JavaAPI開発における認証にAuth0を使用する方法を紹介します。ステップ 1: Auth0 アカウントを作成し、アプリケーションを登録します。

JavaのStringBuilder.insert()関数を使用して、指定された位置に文字列を挿入します。 JavaのStringBuilder.insert()関数を使用して、指定された位置に文字列を挿入します。 Jul 24, 2023 pm 09:37 PM

指定した位置に文字列を挿入するには、Java の StringBuilder.insert() 関数を使用します。StringBuilder は、可変文字列を処理するために使用される Java のクラスです。文字列を操作するためのさまざまなメソッドが提供されます。insert() 関数は、文字列を次の位置に挿入するために使用されます。指定された位置. 文字列を位置的に挿入する一般的な方法の 1 つ。この記事では、insert()関数を使用して指定した位置に文字列を挿入する方法と、対応するコード例を紹介します。入れる()

jQueryでテーブル行を追加、編集、削除するにはどうすればよいですか? jQueryでテーブル行を追加、編集、削除するにはどうすればよいですか? Sep 05, 2023 pm 09:49 PM

今日の Web 開発時代では、特にデータ量の多い Web アプリケーションを扱う場合、効果的かつ効率的なテーブル管理が非常に重要になっています。テーブルの行を動的に追加、編集、削除できる機能により、ユーザー エクスペリエンスが大幅に向上し、アプリケーションがよりインタラクティブになります。これを達成する効果的な方法は、jQuery の機能を活用することです。 jQuery は、開発者が操作を実行するのに役立つ多くの機能を提供します。テーブルの行 テーブルの行は、相互に関連するデータのコレクションであり、HTML の要素で表されます。これは、テーブル内のセル (要素で表される) をグループ化するために使用されます。各要素はテーブル内の行を定義するために使用され、複数属性テーブルの場合、通常は 1 つ以上の要素が含まれます。構文$(セレクター).append(co

Vue3 で Supabase Auth メソッドを使用する方法 Vue3 で Supabase Auth メソッドを使用する方法 May 28, 2023 am 08:39 AM

はじめに Supabase は、自称「オープンソース Firebase の代替品」です。私はしばらく Supbase を使用することに興味があり、その認証 API を使用して Vue.js3 アプリケーションの認証をセットアップしてみようと考えました。まず第一に、なぜ SupabaseAuth を使用する必要があるのでしょうか?要するに、Supabase をデータ ストアとして使用している場合 (これには非常に優れた利点があります)、SupabaseAuth がそのデータへのアクセスを管理できる唯一の方法であるということです。次に、SupabaseAuth にもさまざまな機能があります。ミドルウェアを使用しないユーザー権限 (Postgres を介した行レベルのセキュリティ)

Auth0 を使用した PHP セキュリティ認証の実装 Auth0 を使用した PHP セキュリティ認証の実装 Jul 25, 2023 pm 02:09 PM

Auth0 を使用して PHP セキュリティ検証を実装する はじめに: 最新の Web 開発では、セキュリティ検証は重要な部分です。ユーザーのプライバシーとデータのセキュリティを保護するには、許可されたユーザーのみが機密情報にアクセスしたり、特定の操作を実行したりできるようにする措置を講じる必要があります。 Auth0 は、安全な検証を実現するためのシンプルかつ強力なソリューションを提供する、人気のある認証および認可プラットフォームです。この記事では、Auth0 を使用して PHP セキュリティ検証を実装し、コードを提供する方法を紹介します。

挿入ステートメント 挿入ステートメント Sep 15, 2023 pm 01:30 PM

Insert ステートメントの基本構文は、「INSERT INTO テーブル名 (列 1、列 2、列 3、...)、VALUES (値 1、値 2、値 3、...);」、「テーブル名」です。挿入されるデータテーブルの名前。「列 1」、「列 2」、「列 3」などは、データが挿入されるテーブルの列の名前です。「値 1」、「 「値 2」、「値 3」などは、挿入される列の名前です。データ値。

Java の StringBuilder クラスの insert() メソッドを使用して、指定された場所に文字列を挿入します。 Java の StringBuilder クラスの insert() メソッドを使用して、指定された場所に文字列を挿入します。 Jul 25, 2023 pm 05:18 PM

Java では、StringBuilder クラスの insert() メソッドを使用して、指定した場所に文字列を挿入します。Java では、既存の文字列を挿入する必要がある場合、StringBuilder クラスの insert() メソッドを使用できます。 StringBuilder は、文字列を変更および操作するための一連のメソッドを提供する可変文字シーケンスです。 insert() メソッドを使用すると、元の文字列の指定した位置に文字列を挿入できます。

See all articles