mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 06:37:55 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			102 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
/**
 | 
						|
 * Database schema required by \yii\rbac\DbManager.
 | 
						|
 *
 | 
						|
 * @author Qiang Xue <qiang.xue@gmail.com>
 | 
						|
 * @author Alexander Kochetov <creocoder@gmail.com>
 | 
						|
 * @link https://www.yiiframework.com/
 | 
						|
 * @copyright 2008 Yii Software LLC
 | 
						|
 * @license https://www.yiiframework.com/license/
 | 
						|
 * @since 2.0
 | 
						|
 */
 | 
						|
 | 
						|
if object_id('[auth_assignment]', 'U') is not null
 | 
						|
    drop table [auth_assignment];
 | 
						|
 | 
						|
if object_id('[auth_item_child]', 'U') is not null
 | 
						|
    drop table [auth_item_child];
 | 
						|
 | 
						|
if object_id('[auth_item]', 'U') is not null
 | 
						|
    drop table [auth_item];
 | 
						|
 | 
						|
if object_id('[auth_rule]', 'U') is not null
 | 
						|
    drop table [auth_rule];
 | 
						|
 | 
						|
create table [auth_rule]
 | 
						|
(
 | 
						|
    [name]  varchar(64) not null,
 | 
						|
    [data]  blob,
 | 
						|
    [created_at]           integer,
 | 
						|
    [updated_at]           integer,
 | 
						|
    primary key ([name])
 | 
						|
);
 | 
						|
 | 
						|
create table [auth_item]
 | 
						|
(
 | 
						|
   [name]                 varchar(64) not null,
 | 
						|
   [type]                 smallint not null,
 | 
						|
   [description]          text,
 | 
						|
   [rule_name]            varchar(64),
 | 
						|
   [data]                 blob,
 | 
						|
   [created_at]           integer,
 | 
						|
   [updated_at]           integer,
 | 
						|
   primary key ([name]),
 | 
						|
   foreign key ([rule_name]) references [auth_rule] ([name])
 | 
						|
);
 | 
						|
 | 
						|
create index [idx-auth_item-type] on [auth_item] ([type]);
 | 
						|
 | 
						|
create table [auth_item_child]
 | 
						|
(
 | 
						|
   [parent]               varchar(64) not null,
 | 
						|
   [child]                varchar(64) not null,
 | 
						|
   primary key ([parent],[child]),
 | 
						|
   foreign key ([parent]) references [auth_item] ([name]),
 | 
						|
   foreign key ([child]) references [auth_item] ([name])
 | 
						|
);
 | 
						|
 | 
						|
create table [auth_assignment]
 | 
						|
(
 | 
						|
   [item_name]            varchar(64) not null,
 | 
						|
   [user_id]              varchar(64) not null,
 | 
						|
   [created_at]           integer,
 | 
						|
   primary key ([item_name], [user_id]),
 | 
						|
   foreign key ([item_name]) references [auth_item] ([name]) on delete cascade on update cascade
 | 
						|
);
 | 
						|
 | 
						|
create index [auth_assignment_user_id_idx] on [auth_assignment] ([user_id]);
 | 
						|
 | 
						|
CREATE TRIGGER dbo.trigger_auth_item_child
 | 
						|
    ON dbo.[auth_item]
 | 
						|
    INSTEAD OF DELETE, UPDATE
 | 
						|
    AS
 | 
						|
    DECLARE @old_name VARCHAR (64) = (SELECT name FROM deleted)
 | 
						|
    DECLARE @new_name VARCHAR (64) = (SELECT name FROM inserted)
 | 
						|
    BEGIN
 | 
						|
        IF COLUMNS_UPDATED() > 0
 | 
						|
        BEGIN
 | 
						|
            IF @old_name <> @new_name
 | 
						|
                BEGIN
 | 
						|
                    ALTER TABLE auth_item_child NOCHECK CONSTRAINT FK__auth_item__child;
 | 
						|
                    UPDATE auth_item_child SET child = @new_name WHERE child = @old_name;
 | 
						|
                END
 | 
						|
                UPDATE auth_item
 | 
						|
                SET name = (SELECT name FROM inserted),
 | 
						|
                type = (SELECT type FROM inserted),
 | 
						|
                description = (SELECT description FROM inserted),
 | 
						|
                rule_name = (SELECT rule_name FROM inserted),
 | 
						|
                data = (SELECT data FROM inserted),
 | 
						|
                created_at = (SELECT created_at FROM inserted),
 | 
						|
                updated_at = (SELECT updated_at FROM inserted)
 | 
						|
                WHERE name IN (SELECT name FROM deleted)
 | 
						|
                IF @old_name <> @new_name
 | 
						|
                    BEGIN
 | 
						|
                        ALTER TABLE auth_item_child CHECK CONSTRAINT FK__auth_item__child;
 | 
						|
                    END
 | 
						|
                END
 | 
						|
                ELSE
 | 
						|
                    BEGIN
 | 
						|
                        DELETE FROM dbo.[auth_item_child] WHERE parent IN (SELECT name FROM deleted) OR child IN (SELECT name FROM deleted);
 | 
						|
                        DELETE FROM dbo.[auth_item] WHERE name IN (SELECT name FROM deleted);
 | 
						|
                    END
 | 
						|
        END;
 |