schema-mssql.sql 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /**
  2. * Database schema required by \yii\rbac\DbManager.
  3. *
  4. * @author Qiang Xue <qiang.xue@gmail.com>
  5. * @author Alexander Kochetov <creocoder@gmail.com>
  6. * @link http://www.yiiframework.com/
  7. * @copyright 2008 Yii Software LLC
  8. * @license http://www.yiiframework.com/license/
  9. * @since 2.0
  10. */
  11. if object_id('[auth_assignment]', 'U') is not null
  12. drop table [auth_assignment];
  13. if object_id('[auth_item_child]', 'U') is not null
  14. drop table [auth_item_child];
  15. if object_id('[auth_item]', 'U') is not null
  16. drop table [auth_item];
  17. if object_id('[auth_rule]', 'U') is not null
  18. drop table [auth_rule];
  19. create table [auth_rule]
  20. (
  21. [name] varchar(64) not null,
  22. [data] blob,
  23. [created_at] integer,
  24. [updated_at] integer,
  25. primary key ([name])
  26. );
  27. create table [auth_item]
  28. (
  29. [name] varchar(64) not null,
  30. [type] smallint not null,
  31. [description] text,
  32. [rule_name] varchar(64),
  33. [data] blob,
  34. [created_at] integer,
  35. [updated_at] integer,
  36. primary key ([name]),
  37. foreign key ([rule_name]) references [auth_rule] ([name])
  38. );
  39. create index [idx-auth_item-type] on [auth_item] ([type]);
  40. create table [auth_item_child]
  41. (
  42. [parent] varchar(64) not null,
  43. [child] varchar(64) not null,
  44. primary key ([parent],[child]),
  45. foreign key ([parent]) references [auth_item] ([name]),
  46. foreign key ([child]) references [auth_item] ([name])
  47. );
  48. create table [auth_assignment]
  49. (
  50. [item_name] varchar(64) not null,
  51. [user_id] varchar(64) not null,
  52. [created_at] integer,
  53. primary key ([item_name], [user_id]),
  54. foreign key ([item_name]) references [auth_item] ([name]) on delete cascade on update cascade
  55. );
  56. CREATE TRIGGER dbo.trigger_auth_item_child
  57. ON dbo.[auth_item]
  58. INSTEAD OF DELETE, UPDATE
  59. AS
  60. DECLARE @old_name VARCHAR (64) = (SELECT name FROM deleted)
  61. DECLARE @new_name VARCHAR (64) = (SELECT name FROM inserted)
  62. BEGIN
  63. IF COLUMNS_UPDATED() > 0
  64. BEGIN
  65. IF @old_name <> @new_name
  66. BEGIN
  67. ALTER TABLE auth_item_child NOCHECK CONSTRAINT FK__auth_item__child;
  68. UPDATE auth_item_child SET child = @new_name WHERE child = @old_name;
  69. END
  70. UPDATE auth_item
  71. SET name = (SELECT name FROM inserted),
  72. type = (SELECT type FROM inserted),
  73. description = (SELECT description FROM inserted),
  74. rule_name = (SELECT rule_name FROM inserted),
  75. data = (SELECT data FROM inserted),
  76. created_at = (SELECT created_at FROM inserted),
  77. updated_at = (SELECT updated_at FROM inserted)
  78. WHERE name IN (SELECT name FROM deleted)
  79. IF @old_name <> @new_name
  80. BEGIN
  81. ALTER TABLE auth_item_child CHECK CONSTRAINT FK__auth_item__child;
  82. END
  83. END
  84. ELSE
  85. BEGIN
  86. DELETE FROM dbo.[auth_item_child] WHERE parent IN (SELECT name FROM deleted) OR child IN (SELECT name FROM deleted);
  87. DELETE FROM dbo.[auth_item] WHERE name IN (SELECT name FROM deleted);
  88. END
  89. END;