Как реализовать раздачу прав доступа в программе?

269
01 марта 2017, 18:18

Добрый день! На текущий момент реализована следующая схема: В MySQL хранится 4 таблицы:

  • user - таблица с данными пользователя

CREATE TABLE user ( id_User int(11) NOT NULL AUTO_INCREMENT,
Login varchar(50) NOT NULL, Password varchar(50) NOT NULL,
Surname varchar(50) NOT NULL, Name varchar(50) NOT NULL,
Patronymic varchar(50) NOT NULL, Mail varchar(50) DEFAULT NULL, Phone varchar(50) NOT NULL, dep int(11) NOT NULL, Roles varchar(1000) NOT NULL DEFAULT '0|', Groups varchar(1000) NOT NULL DEFAULT '0|', Access varchar(1000) NOT NULL DEFAULT '0|',
Access_block varchar(1000) NOT NULL DEFAULT '0|', PRIMARY KEY (id_User) ) ENGINE=MyISAM AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;

Данные записаны след. образом:

INSERT INTO user VALUES ('1', 'Иванов И.И.', '18ae6e16fdf5397b18bb36020755ed84', 'Иванов', 'Иван', 'Иванович', 'email@gmail.com', '666-66-66', '4', '0|', '1|2|', '0|', '0|');

  • access_rights - таблица с правами доступа

CREATE TABLE access_rights ( id int(11) NOT NULL AUTO_INCREMENT, Name varchar(100) NOT NULL, Description varchar(2500) NOT NULL, PRIMARY KEY (id,Name) ) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

Данные записаны след. образом:

INSERT INTO access_rights VALUES ('7', 'Журнал регистрации', 'Просмотр журнала регистрации');

  • roles - таблица ролей

CREATE TABLE roles ( id int(11) NOT NULL AUTO_INCREMENT, Name varchar(100) NOT NULL, Description varchar(2500) NOT NULL, id_access_rights varchar(1000) DEFAULT NULL, PRIMARY KEY (id,Name) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

Данные записаны след. образом:

INSERT INTO roles VALUES ('1', 'Администратор', 'Администратор', '1|2|3|4|5|6|7|8|9|10|11|12|13|14|16|17|0|');

  • groups - таблица групп

CREATE TABLE groups ( id int(11) NOT NULL AUTO_INCREMENT, Name varchar(100) NOT NULL, description varchar(2500) NOT NULL, id_roles varchar(1000) DEFAULT NULL, PRIMARY KEY (id,Name) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

Данные записаны след. образом:

INSERT INTO groups VALUES ('1', 'САдмины', 'Администратор у которого есть доступ ко всему', '1|2|');

По запросу через WCF передаю все права пользователя клиенту для прорисовки интерфейса программы, Согласно назначенным группам, ролям и правам доступа из таблицы user. Схема не идеальная, просьба подсказать как ее (схему) привести к идеалу.
Либо подсказать новую схему если она идеальная.

Поделитесь информацией у кого как организованы данные схемы.

p.s. Информация для параноиков, что права можно подменить: клиенту права доступа отдаю только для прорисовки интерфейса, при выполнении функций идет проверка прав доступа на стороне сервера (WCF).

READ ALSO
Credentials LibGit2Sharp

Credentials LibGit2Sharp

Добрый день!

251
Перспектива использования WPF

Перспектива использования WPF

Всем доброго дня!

475
Web Api и Asp.Net MVC клиент

Web Api и Asp.Net MVC клиент

Сделал в учебных целях AspNet MVC приложение ресторан

332
Как в BigInteger хранятся числа?

Как в BigInteger хранятся числа?

Я вот пишу для своих нужд небольшую библиотеку для работы с длинными числамиНаписал и сложение, и умножение методом Карацубы

244