Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Доступ! / 25 сообщений из 46, страница 1 из 2
08.05.2007, 13:02
    #34512329
oxcom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Здравствуйте!

Пишу дипломку на cache 2005 "Web-site образовательного учреждения"!

У меня есть проверка на сайте на логин и пароль. Она только проверяет и все. У меня вопрос по доступу.

Может кто-нибудь подсказать как сделать так, чтобы зарегистрированные пользователи могли заходить на определенные страницы, а незарегистрированные пользователи нет? Использовать Coocie или можно использовать глобалы? И как сделать так чтобы при загрузке страницы она проверяла зареген пользователь или нет? Я новичок в каше поэтому может что-то неправильно описал.

Заранее ответившим спасибо!
...
Рейтинг: 0 / 0
08.05.2007, 13:45
    #34512599
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Роль Каше в этом вопросе на втором плане :)
Ты это умееш делать не в Каше?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
08.05.2007, 13:49
    #34512617
oxcom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Нет, я и в каше и в web-технологиях новичок!
...
Рейтинг: 0 / 0
08.05.2007, 14:01
    #34512684
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Дело осложняется... :(
Вот один из примеров редиректа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<html>
<title>Передод на страницу...</title>
<head>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=WINDOWS-1251">
<script language='javascript'>
function Go() {
   top.location="menu.csp"
}
</script>
</head>
<body onload='Go()'>
<p>Переход на другую страницу...</p>
<p>Если переход на другую страницу не происходит автоматически то нажмите
<a href='menu.csp'>сюда</a>.
</p>
</body>
</html>
Только тут он делается без анализа и после загрузки страницы... А тебе нужно другое событие, не onload ... Выполняемое в самом начале, просто я сейчас не помню к чему там лучше привязаться...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
08.05.2007, 14:19
    #34512772
oxcom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
А как нибудь так нельзя типа:кодом каше

Код: plaintext
1.
2.
3.
4.
5.
<script language='Cache'>
if (^ok= 1 ) then
...
else
....
</script>

^ok -- глобальная переменная
...
Рейтинг: 0 / 0
08.05.2007, 14:28
    #34512817
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Думаю что тут желательно разграничить "обязанности"...
Каше пусть занимается данными... А управлением страниц пусть займется что-то вебовское...

Для начала тебе нужно решить какие данные будут использоваться в задачке... Как их хранить... После этого можно двигаться дальше.
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
08.05.2007, 14:33
    #34512839
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Напиши на ksa@npcair.ru пришлю тебе для ознакомления курс молодого кашевара Почитай...
Просто тут не крепится... Файл большеват :(
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
08.05.2007, 14:38
    #34512856
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Делать наверно нужно примерно так

1. Берем параметры логин-пароль.
2. Проверяем их, если проверка прошла, записываем их внутри базы (типа такой-то зашел под такой сессией)
3. В каждой странице в методе OnPreHTTP проверяем залогинился ли под этой сессией какой-нибудь пользователь, и можно ли ему открывать эту страницу.
Если OnPreHTTP возращает 1, то загрузка тела страницы продолжается, если 0, то обрывается
...
Рейтинг: 0 / 0
08.05.2007, 14:42
    #34512875
oxcom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Ну у меня на сайте будет 5 ролей

это

пользователь
студент
преподаватель
декан
администратор

пользователь - не может делать ниче только просмотреть сайт
студент - может просмотрть базу "оценки" добавлять комментарии к лекциям
преподаватель - может смореть базу "оценки" и список студентов а также добавлять лекции
декан - может смотреть список преподавателей, список студентов, базу "оценки"
администратор - может смотреть редактировать все.

так нормально будет? Может Вы посоветуйте как-нить получше!
...
Рейтинг: 0 / 0
08.05.2007, 14:47
    #34512904
oxcom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Блок А.Н.
2. Проверяем их, если проверка прошла, записываем их внутри базы (типа такой-то зашел под такой сессией)


А сессии всегда же разные, или нет?

Если я зашел в 1 раз сессия допустим 2885876
если зашел в 2 раз то сессия 45135443

или я не прав?
...
Рейтинг: 0 / 0
08.05.2007, 15:08
    #34512974
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
В течении одного сеанса сессия одна, но между сеансами уникальная
Поэтому нужно хранить связку сессия/пользователь, а связку эту делать в момент логина.
...
Рейтинг: 0 / 0
08.05.2007, 15:11
    #34512978
oxcom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Блок А.Н. А вы не могди бы на небольшом примере показать? Как примерно это выглядит!
...
Рейтинг: 0 / 0
08.05.2007, 15:46
    #34513146
aleshap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Я думаю не стоит усложнять задачу, необходимо простейший пример для дипломной работы, крутых наворотив с супер безопасности тут не нужно.

Просто в OnPreHTTP метода страницы размещаешь примерно следующий код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ClassMethod OnPreHTTP() As %Boolean [ Final, ServerOnly =  1  ]
{
 	if %session.Get("status")="" d %session.Set("status","пользователь")  //минимальный достоп	
	if (%request.Get("app")="login") {
		//сюда поподаем после submit на форме регистрации
		s login = %request.Get("Login")
		s password = %request.Get("Password")
		// проверка данных авторицазии
		if OK { 
			d %session.Set("status","роль пользователя") 
			d %session.Set("userID",ID) // ID - пользователя
		} else {
			d %session.Set("status","пользователь")	
		}
	}
	q $$$OK
}

Далее в коде можно проверять %session.Get("status") и в зависимости от роли, давать или не давать пускать или не пускать.
...
Рейтинг: 0 / 0
08.05.2007, 15:58
    #34513202
oxcom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Спасибо всем ответившим! Постараюсь разобраться, если не получится в этот же топик обращусь!
...
Рейтинг: 0 / 0
08.05.2007, 16:09
    #34513254
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Попробую, только придется много выкидывать из текста, и кое-что добалять, так что не факт, что будет работать без отладки. Я постараюсь покороче
Страница входа:
Код: plaintext
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.
<HTML>
<HEAD>
</server>
<script language=javascript>
 function login()
 {#call(..login(loginForm.user.value,loginForm.password.value))#;
 }
</script>
</HEAD>
<BODY>
<div style="height:33%"></div>
<center>
<form name=loginForm>
<table>
 <tr> <td>Имя <td><input type=text name=user onkeypress="if(event.keyCode==13)password.focus()" >
 <tr> <td>Пароль<td><input type=password name=password onkeypress="if(event.keyCode==13)login()">
 <tr> <td colspan= 2 ><center><button onclick=login()>Вход</button>
</table>
</form>
</BODY>
</HTML>
<script language=cache method=login arguments="user:%String,password:%String">
 s flag=##class(Auth.SysUser).Login(user,password,%session.SessionId)
 w:flag "location.href='main.csp';"
 w:'flag "alert('Вход не произведен');"
 q
</script>

Класс
Пользователя
Код: plaintext
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.
Class Auth.SysUser Extends %Persistent
{

Parameter EXTENTSIZE =  2 ;

Property Session As %String(TRUNCATE =  1 );

Property Enabled As %Boolean [ InitialExpression =  1  ];

Property Login As %String(TRUNCATE =  1 ) [ InitialExpression =  1 , Required ];

Property Hash As %String(TRUNCATE =  1 ) [ Private ];

Property Password As %String(TRUNCATE =  1 ) [ Transient ];

Index LoginIndex On Login [ Unique ];

Index SessionIndex On Session;

Method PasswordSet(pass As %String) As %Status
{
 q:pass=""
 s ..Hash=$system.Encryption.MD5Encode(pass)
}

ClassMethod SetPassword(login As %String, pass As %String)
{
	s hash=$system.Encryption.MD5Encode(pass)
 	&sql(update Auth.SysUser set hash=:hash where login=:login )
}

ClassMethod CheckPassword(login As %String, pass As %String) As %Boolean
{
	s hash=$system.Encryption.MD5Encode(pass)
 	&sql(select login from Auth.SysUser where login=:login and hash=:hash and enabled= 1 )
 	q:SQLCODE= 0   1 
 	q  0 
}

ClassMethod Login(login As %String, pass As %String, session As %String) As %Boolean
{
 if ..CheckPassword(login,pass)
	{&sql(update Auth.SysUser set session='' where session=:session) 
	 &sql(update Auth.SysUser set session=:session where login=:login)
	 q  1 
	}
 q  0 
}

ClassMethod Create(login)
{
 &sql(insert into Auth.SysUser(login) values(login))
}
///возвращает текущего пользователя
ClassMethod CurrentUser(session) as %String
{
 &sql(select login into :login from Auth.SysUser where session=:session)
 q:SQLCODE= 0  login
 q ""
}
}


И примерно так main.csp или другая csp-шка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<script language=cache method=OnPreHTTP arguments= "" returntype=%Boolean>
 s login=##class(Auth.SysUser).CurrentUser(%session.SessionId)
 if (/*если пользователю нельзя заходить на эту страницу или логин не был произведен */)
  { //Какие-то действия
    q  0 
  }
 q  1 
</script>

<html>
 ......
</html>


Да, так как каше - все-таки объектная система, то например метод OnPreHTTP можно определить в классе и наследовать от него CSP-шки тегом
Код: plaintext
<CSP:CLASS SUPER="какой-то класс">

Примерно так, я думаю.
В этом примере один пользователь может зайти только с одной машины. Если он зайдет с другой сессией, то предыдущая сотрется.
...
Рейтинг: 0 / 0
08.05.2007, 16:54
    #34513417
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Вот так и выкладывают "исходники"
...
Рейтинг: 0 / 0
08.05.2007, 17:31
    #34513564
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
авторВот так и выкладывают "исходники"
А вы про что?
...
Рейтинг: 0 / 0
10.05.2007, 08:19
    #34515154
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
А я что-то не очень доверяю сессиям... :( Т.к. они "исчезают" через некоторый таймаут...
В основном используем %request
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
10.05.2007, 10:16
    #34515327
oxcom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
ОГРОМНОЕ СПАСИБО всем кто ответил! Постараюсь разобраться!
...
Рейтинг: 0 / 0
10.05.2007, 11:50
    #34515694
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
А я что-то не очень доверяю сессиям... :( Т.к. они "исчезают" через некоторый таймаут...
Запросы можно гонять в отдельном окне или фрейме.
...
Рейтинг: 0 / 0
10.05.2007, 13:28
    #34516108
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Дело не в запросах... А в самой природе сессий...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
10.05.2007, 13:48
    #34516170
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Ну правильно, такая у них природа, мрут без работы.
Заставляйте их работать ;-)
...
Рейтинг: 0 / 0
10.05.2007, 15:58
    #34516746
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Блок А.Н.Заставляйте их работать ;-)
Так мы сосвоим ПО не работаем
...
Рейтинг: 0 / 0
10.05.2007, 17:47
    #34517211
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
А как еще с ПО нужно работать.

Если ПО работает (включено) - сесиия живет. Не работает (выключено) - сессия дохнет.

Да здраствует сессии неработающего ПО ?
...
Рейтинг: 0 / 0
11.05.2007, 08:07
    #34517953
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ!
Наши пользователи очень любят зайти в приложение и ничего в нем не делать... Таймаут кончается... Сессия помирает... :(
Потом они загораются желанием поработать но уже поздно. :)
Вот отсюда ноги и растут...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Доступ! / 25 сообщений из 46, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]